以工作為基礎的非同步模式 (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類別
EFMySqlCommandTaskPrepareAsync()TaskPrepareAsync(CancellationToken)
命名空間
MySql.Data類別
MySqlBulkLoaderTask<int>LoadAsync()Task<int>LoadAsync(CancellationToken
類別
MySqlConnectionTask<MySqlTransaction>BeginTransactionAsync()Task<MySqlTransaction>BeginTransactionAsync (CancellationToken)Task<MySqlTransaction>BeginTransactionAsync(IsolationLevel)Task<MySqlTransaction>BeginTransactionAsync (IsolationLevel , CancellationToken)TaskChangeDatabaseAsync(string)TaskChangeDatabaseAsync(string, CancellationToken)TaskCloseAsync()TaskCloseAsync(CancellationToken)TaskClearPoolAsync(MySqlConnection)TaskClearPoolAsync(MySqlConnection, CancellationToken)TaskClearAllPoolsAsync()TaskClearAllPoolsAsync(CancellationToken)Task<MySqlSchemaCollection>GetSchemaCollection(string, string[])Task<MySqlSchemaCollection>GetSchemaCollection(string, string[], CancellationToken)
類別
MySqlDataAdapterTask<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)
類別
MySqlHelperTask<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[])TaskUpdateDataSetAsync(string, string, DataSet, string)TaskUpdateDataSetAsync(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[])
類別
MySqlScriptTask<int>ExecuteAsync()Task<int>ExecuteAsync(CancellationToken)
除了上面列出的方法外,以下是繼承自 .NET Framework 的方法
命名空間
MySql.Data.Entity類別
EFMySqlCommandTask<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類別
MySqlCommandTask<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)
類別
MySqlConnectionTaskOpenAsync()TaskOpenAsync(CancellationToken)
類別
MySqlDataReaderTask<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();
}