我有一个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
。
答案 0 :(得分:1)
方法的返回类型应为Task
,但return
方法的正文中不应有async
个语句。如果您要返回return
,则该方法应仅使用Task<T>
,并且任务本身会产生结果。
Task
是一个没有结果的任务(但表示它完成并传播异常的时间)以及一个void方法,这是一个没有结果(但表示完成和传播异常的时间)是异步对应物。