The Task-based Asynchronous Pattern (TAP) is a pattern for
    asynchrony in the .NET Framework. It is based on the
    Task and Task<TResult>
    types in the System.Threading.Tasks namespace,
    which are used to represent arbitrary asynchronous operations.
  
Async-Await are new keywords introduced to work with the TAP. The Async modifier is used to specify that a method, lambda expression, or anonymous method is asynchronous. The Await operator is applied to a task in an asynchronous method to suspend the execution of the method until the awaited task completes.
Requirements
- Async-Await support requires .NET Framework 4.5 or later 
- TAP support requires .NET Framework 4.0 or later 
- MySQL Connector/NET 6.9 or later 
Methods
The following methods can be used with either TAP or Async-Await.
- Namespace - MySql.Data.Entity- Class - EFMySqlCommand- Task- PrepareAsync()
- Task- PrepareAsync(CancellationToken)
 
 
- Namespace - MySql.Data- Class - MySqlBulkLoader- Task<int>- LoadAsync()
- Task<int>- LoadAsync(CancellationToken
 
- Class - 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)
 
- Class - 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)
 
- Class - 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[])
 
- Class - MySqlScript- Task<int>- ExecuteAsync()
- Task<int>- ExecuteAsync(CancellationToken)
 
 
In addition to the methods listed above, the following are methods inherited from the .NET Framework:
- Namespace - MySql.Data.Entity- Class - 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)
 
 
- Namespace - MySql.Data- Class - 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)
 
- Class - MySqlConnection- Task- OpenAsync()
- Task- OpenAsync(CancellationToken)
 
- Class - 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)
 
 
Examples
The following C# code examples demonstrate how to use the asynchronous methods:
    In this example, a method has the async modifier
    because the method await call made applies to the
    method LoadAsync. The method returns a
    Task object that contains information about the
    result of the awaited method. Returning Task is
    like having a void method, but you should not use async
    void if your method is not a top-level access method like
    an event.
  
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();
}
    In this example, an "async void" method is used with "await" for the
    ExecuteNonQueryAsync method, to correspond to the
    onclick event of a button. This is why the method does not return a
    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();
}