我有一个C#函数,目前看起来像这样:
public void Execute()
{
// Query Database
// Process records.
}
...
myObject.Execute();
现在,我想将此代码迁移到异步,因为它通过 SqlCommand
访问数据库。为了做到这一点,我写了以下内容:
public async void Execute()
{
// Query Database
// Process records.
}
...
await myObject.Execute();
然而,在对此进行了更多研究之后,每个人都说"避免async void
!它会让你的系统崩溃。好的,但是在我的情况下,还有什么选择?会不会是
public async Task Execute()
{
// Query Database
// Process records.
return null;
}
...
await myObject.Execute();
在我的方法不返回任何内容的情况下如何使用async
(它可能会抛出Exception
)。
方法的返回类型应Task
,但async
方法的主体中不应有return
语句。 仅当您返回Task<T>
并且任务本身将具有结果时,该方法才应使用 return
。
Task
是没有结果的任务(但指示何时完成并传播异常),因此 void 方法(即没有结果的方法(但指示何时完成并传播异常)是异步对应项。