5.14 Асинхронные методы
Шаблон асинхронности на основе задач (TAP) — это шаблон асинхронности в .NET Framework. Он основан на типах Task и Task<TResult> в пространстве имён System.Threading.Tasks, которые используются для представления произвольных асинхронных операций.
Async-Await — это новые ключевые слова, введённые для работы с TAP. Модификатор Async используется для указания того, что метод, лямбда-выражение или анонимный метод являются асинхронными. Оператор 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();
}
© 2025 Oracle
Licensed under the GPLv2 License.