我有一些代码工作正常,但我不明白为什么。我的方法使用ExecuteReaderAsync,ExecuteNonQueryAsync和WriteToServerAsync执行一些SQL操作。 WriterToServerAsync是我所调用的最后一个。为什么当签名是公共异步Task MethodName时不需要返回任务?
我最初编写方法时使用了签名public async void Run(),但我使用的Hangfire作业运行器不会接受异步,除非它返回一个Task。我将签名更改为async Task Run(),然后试图找出如何从该方法返回任务。
我认为我可以只返回从WriteToServerAsync返回的同一个任务,但这不会编译。我完全删除了返回语句。编译器不会抱怨,并且该方法正常工作。
public async Task Run()
{
// Start querying the source first as it is the slowest operation...
var sqlSourceConnection = new SqlConnection(sourceConnectionString);
// The query is kind of slow so it needs more than the default 30 second timeout...
var sqlSourceCommand = new SqlCommand(SourceDataSql, sqlSourceConnection) { CommandTimeout = 180 };
sqlSourceConnection.Open();
// Query the records from the source...
var querySourceDataTask = sqlSourceCommand.ExecuteReaderAsync();
// Delete existing records from target to make way for the new set...
var sqlTargetConnection = new SqlConnection(targetConnectionString);
sqlTargetConnection.Open();
var sqlTargetTransaction = sqlTargetConnection.BeginTransaction(IsolationLevel.ReadCommitted);
var deleteRowsTask = sqlDeleteCommand.ExecuteNonQueryAsync();
// Wait for the delete and query tasks to finish before attempting the bulk copy...
await Task.WhenAll(deleteRowsTask, querySourceDataTask);
await sqlBulkCopy.WriteToServerAsync(querySourceDataTask.Result);
}
为什么编译和工作时没有任务的返回语句?
这是基础知识[如何异步/等待作品( http://stackoverflow.com/questions/14177891/can-somebody-please-explain-async-await)。 –
这个人有非常好的博客,在那里你可以找到很多关于异步/等待的有趣的东西。和更多:) http://blog.stephencleary.com/ – Sasha