以工作為基礎的非同步模式 (TAP) 是 .NET Framework 中用於非同步的模式。它基於 System.Threading.Tasks
命名空間中的 Task
和 Task<TResult>
類型,這些類型用於表示任意的非同步作業。
Async-Await 是為了使用 TAP 而引入的新關鍵字。Async 修飾詞 用於指定方法、Lambda 運算式或匿名方法是非同步的。Await 運算子會套用至非同步方法中的工作,以暫停方法的執行,直到等待的工作完成。
需求
Async-Await 支援需要 .NET Framework 4.5 或更新版本
TAP 支援需要 .NET Framework 4.0 或更新版本
MySQL Connector/NET 6.9 或更新版本
方法
以下方法可以搭配 TAP 或 Async-Await 使用。
命名空間
MySql.Data.Entity
類別
EFMySqlCommand
Task
PrepareAsync()
Task
PrepareAsync(CancellationToken)
命名空間
MySql.Data
類別
MySqlBulkLoader
Task<int>
LoadAsync()
Task<int>
LoadAsync(CancellationToken
類別
MySqlConnection
Task<MySqlTransaction>
BeginTransactionAsync()
Task<MySqlTransaction>
BeginTransactionAsync (CancellationToken)
Task<MySqlTransaction>
BeginTransactionAsync(IsolationLevel)
Task<MySqlTransaction>
BeginTransactionAsync (IsolationLevel , CancellationToken)
Task
ChangeDatabaseAsync(string)
Task
ChangeDatabaseAsync(string, CancellationToken)
Task
CloseAsync()
Task
CloseAsync(CancellationToken)
Task
ClearPoolAsync(MySqlConnection)
Task
ClearPoolAsync(MySqlConnection, CancellationToken)
Task
ClearAllPoolsAsync()
Task
ClearAllPoolsAsync(CancellationToken)
Task<MySqlSchemaCollection>
GetSchemaCollection(string, string[])
Task<MySqlSchemaCollection>
GetSchemaCollection(string, string[], CancellationToken)
類別
MySqlDataAdapter
Task<int>
FillAsync(DataSet)
Task<int>
FillAsync(DataSet, CancellationToken)
Task<int>
FillAsync(DataTable)
Task<int>
FillAsync(DataTable, CancellationToken)
Task<int>
FillAsync(DataSet, string)
Task<int>
FillAsync(DataSet, string, CancellationToken)
Task<int>
FillAsync(DataTable, IDataReader)
Task<int>
FillAsync(DataTable, IDataReader, CancellationToken)
Task<int>
FillAsync(DataTable, IDbCommand, CommandBehavior)
Task<int>
FillAsync(DataTable, IDbCommand, CommandBehavior, CancellationToken)
Task<int>
FillAsync(int, int, params DataTable[])
Task<int>
FillAsync(int, int, params DataTable[], CancellationToken)
Task<int>
FillAsync(DataSet, int, int, string)
Task<int>
FillAsync(DataSet, int, int, string, CancellationToken)
Task<int>
FillAsync(DataSet, string, IDataReader, int, int)
Task<int>
FillAsync(DataSet, string, IDataReader, int, int, CancellationToken)
Task<int>
FillAsync(DataTable[], int, int, IDbCommand, CommandBehavior)
Task<int>
FillAsync(DataTable[], int, int, IDbCommand, CommandBehavior, CancellationToken)
Task<int>
FillAsync(DataSet, int, int, string, IDbCommand, CommandBehavior)
Task<int>
FillAsync(DataSet, int, int, string, IDbCommand, CommandBehavior, CancellationToken)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, CancellationToken)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, string)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, string, CancellationToken)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, string, IDataReader)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, string, IDataReader, CancellationToken)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, IDbCommand, string, CommandBehavior)
Task<DataTable[]>
FillSchemaAsync(DataSet, SchemaType, IDbCommand, string, CommandBehavior, CancellationToken)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType, CancellationToken)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType, IDataReader)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType, IDataReader, CancellationToken)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType, IDbCommand, CommandBehavior)
Task<DataTable>
FillSchemaAsync(DataTable, SchemaType, IDbCommand, CommandBehavior, CancellationToken)
Task<int>
UpdateAsync(DataRow[])
Task<int>
UpdateAsync(DataRow[], CancellationToken)
Task<int>
UpdateAsync(DataSet)
Task<int>
UpdateAsync(DataSet, CancellationToken)
Task<int>
UpdateAsync(DataTable)
Task<int>
UpdateAsync(DataTable, CancellationToken)
Task<int>
UpdateAsync(DataRow[], DataTableMapping, CancellationToken)
Task<int>
UpdateAsync(DataSet, string)
Task<int>
UpdateAsync(DataSet, string, CancellationToken)
類別
MySqlHelper
Task<DataRow>
ExecuteDataRowAsync(string, string, params MySqlParameter[])
Task<DataRow>
ExecuteDataRowAsync(string, string, CancellationToken, params MySqlParameter[])
Task<int>
ExecuteNonQueryAsync(MySqlConnection, string, params MySqlParameter[])
Task<int>
ExecuteNonQueryAsync(MySqlConnection, string, CancellationToken, params MySqlParameter[])
Task<int>
ExecuteNonQueryAsync(string, string, params MySqlParameter[])
Task<int>
ExecuteNonQueryAsync(string, string, CancellationToken, params MySqlParameter[])
Task<DataSet>
ExecuteDatasetAsync(string, string)
Task<DataSet>
ExecuteDatasetAsync(string, string, CancellationToken)
Task<DataSet>
ExecuteDatasetAsync(string, string, CancellationToken, params MySqlParameter[])
Task<DataSet>
ExecuteDatasetAsync(MySqlConnection, string)
Task<DataSet>
ExecuteDatasetAsync(MySqlConnection, string, CancellationToken)
Task<DataSet>
ExecuteDatasetAsync(MySqlConnection, string, params MySqlParameter[])
Task<DataSet>
ExecuteDatasetAsync(MySqlConnection, string, CancellationToken, params MySqlParameter[])
Task
UpdateDataSetAsync(string, string, DataSet, string)
Task
UpdateDataSetAsync(string, string, DataSet, string, CancellationToken)
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, MySqlTransaction, string, MySqlParameter[], bool)
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, MySqlTransaction, string, MySqlParameter[], bool, CancellationToken)
Task<MySqlDataReader>
ExecuteReaderAsync(string, string)
Task<MySqlDataReader>
ExecuteReaderAsync(string, string, CancellationToken)
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, string)
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, string, CancellationToken)
Task<MySqlDataReader>
ExecuteReaderAsync(string, string, params MySqlParameter[])
Task<MySqlDataReader>
ExecuteReaderAsync(string, string, CancellationToken, params MySqlParameter[])
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, string, params MySqlParameter[])
Task<MySqlDataReader>
ExecuteReaderAsync(MySqlConnection, string, CancellationToken, params MySqlParameter[])
Task<object>
ExecuteScalarAsync(string, string)
Task<object>
ExecuteScalarAsync(string, string, CancellationToken)
Task<object>
ExecuteScalarAsync(string, string, params MySqlParameter[])
Task<object>
ExecuteScalarAsync(string, string, CancellationToken, params MySqlParameter[])
Task<object>
ExecuteScalarAsync(MySqlConnection, string)
Task<object>
ExecuteScalarAsync(MySqlConnection, string, CancellationToken)
Task<object>
ExecuteScalarAsync(MySqlConnection, string, params MySqlParameter[])
Task<object>
ExecuteScalarAsync(MySqlConnection, string, CancellationToken, params MySqlParameter[])
類別
MySqlScript
Task<int>
ExecuteAsync()
Task<int>
ExecuteAsync(CancellationToken)
除了上面列出的方法外,以下是繼承自 .NET Framework 的方法
命名空間
MySql.Data.Entity
類別
EFMySqlCommand
Task<DbDataReader>
ExecuteDbDataReaderAsync(CommandBehaviour, CancellationToken)
Task<int>
ExecuteNonQueryAsync()
Task<int>
ExecuteNonQueryAsync(CancellationToken)
Task<DbDataReader>
ExecuteReaderAsync()
Task<DbDataReader>
ExecuteReaderAsync(CancellationToken)
Task<DbDataReader>
ExecuteReaderAsync(CommandBehaviour)
Task<DbDataReader>
ExecuteReaderAsync(CommandBehaviour, CancellationToken)
Task<object>
ExecuteScalarAsync()
Task<object>
ExecuteScalarAsync(CancellationToken)
命名空間
MySql.Data
類別
MySqlCommand
Task<DbDataReader>
ExecuteDbDataReaderAsync(CommandBehaviour, CancellationToken)
Task<int>
ExecuteNonQueryAsync()
Task<int>
ExecuteNonQueryAsync(CancellationToken)
Task<DbDataReader>
ExecuteReaderAsync()
Task<DbDataReader>
ExecuteReaderAsync(CancellationToken)
Task<DbDataReader>
ExecuteReaderAsync(CommandBehaviour)
Task<DbDataReader>
ExecuteReaderAsync(CommandBehaviour, CancellationToken)
Task<object>
ExecuteScalarAsync()
Task<object>
ExecuteScalarAsync(CancellationToken)
類別
MySqlConnection
Task
OpenAsync()
Task
OpenAsync(CancellationToken)
類別
MySqlDataReader
Task<T>
GetFieldValueAsync<T>(int)
Task<T>
GetFieldValueAsync<T>(int, CancellationToken)
Task<bool>
IsDBNullAsync(int)
Task<bool>
IsDBNullAsync(int, CancellationToken)
Task<bool>
NextResultAsync()
Task<bool>
NextResultAsync(CancellationToken)
Task<bool>
ReadAsync()
Task<bool>
ReadAsync(CancellationToken)
範例
以下 C# 程式碼範例示範如何使用非同步方法
在此範例中,方法具有 async
修飾詞,因為所進行的 await
呼叫適用於 LoadAsync
方法。此方法會傳回一個 Task
物件,其中包含關於等待方法結果的資訊。傳回 Task
就像有一個 void 方法,但是如果您的方法不是像事件一樣的頂層存取方法,則不應使用 async void
。
public async Task BulkLoadAsync()
{
MySqlConnection myConn = new MySqlConnection("MyConnectionString");
MySqlBulkLoader loader = new MySqlBulkLoader(myConn);
loader.TableName = "BulkLoadTest";
loader.FileName = @"c:\MyPath\MyFile.txt";
loader.Timeout = 0;
var result = await loader.LoadAsync();
}
在此範例中,「async void」方法與「await」一起用於 ExecuteNonQueryAsync
方法,以對應於按鈕的 onclick 事件。這就是為什麼該方法不傳回 Task
的原因。
private async void myButton_Click()
{
MySqlConnection myConn = new MySqlConnection("MyConnectionString");
MySqlCommand proc = new MySqlCommand("MyAsyncSpTest", myConn);
proc.CommandType = CommandType.StoredProcedure;
int result = await proc.ExecuteNonQueryAsync();
}