我有一个Web服务器,定期执行作业以合并和发送记录(大量请求日志)。
Task.Run(() =>
{
while (true)
{
try
{
MergeAndPutRecords();
}
catch (Exception ex)
{
Logger.Error(ex);
}
}
});
在MergeAndPutRecords
函数中,有合并记录的代码和异步函数返回发送记录的任务。(实际上这是Amazon Kinesis Firehose的PutRecordBatchAsync。)如果我在不使用await关键字的情况下调用该函数会发生什么?函数是否在单独的线程上运行? 这里说它不会。那么返回的任务意味着什么? 这里表示不带await关键字的异步方法意味着:
那么我的定期作业和PutRecordBatchAsync会同时处理吗?我知道异步和并发是不同的。但是没有await关键字,它们在同一个线程中。哪个会先执行?我很困惑...
- 在当前线程上启动异步方法。忽略所有结果(包括异常)。
需要合并并实时发送大量记录。所以我认为必须同时执行...
async
关键字本身不起作用。每个await
被组合成一个AsyncStateMachine
,可以异步处理内容。如果在async
方法中没有await
关键字,则没有创建AsyncStateMachine
的必要,因此您将得到同步方法。 - FCinawait
被用来等待结果的返回。它不会以任何方式控制获取结果的过程是如何启动或正在进行的获取结果的过程是如何工作的。 - Damien_The_Unbeliever