设置异步方法
Setting up an async method
我有一个 C# 函数,目前看起来像这样:
public void Execute()
{
// Query Database
// Process records.
}
...
myObject.Execute();
现在,我想将此代码迁移为异步代码,因为它通过 SqlCommand
访问数据库。为了做到这一点,我写了以下内容:
public async void Execute()
{
// Query Database
// Process records.
}
...
await myObject.Execute();
然而,在进一步研究之后,每个人都说 "avoid async void
! it will crash your system." 好吧,但我的情况还有什么选择呢?会不会
public async Task Execute()
{
// Query Database
// Process records.
return null;
}
...
await myObject.Execute();
如果我的方法没有 return 任何东西(它可能会抛出 Exception
),我该如何使用 async
。
方法的 return 类型应该是 Task
但 async
方法的主体中不应有 return
语句。如果您正在 returning a Task<T>
并且任务本身会有结果,则该方法应该只使用 return
。
A Task
是一个 没有结果的任务 (但会指示它何时完成并传播异常),因此是一个 void 方法,该方法 没有结果(但指示何时完成并传播异常)是异步对应项。
我有一个 C# 函数,目前看起来像这样:
public void Execute()
{
// Query Database
// Process records.
}
...
myObject.Execute();
现在,我想将此代码迁移为异步代码,因为它通过 SqlCommand
访问数据库。为了做到这一点,我写了以下内容:
public async void Execute()
{
// Query Database
// Process records.
}
...
await myObject.Execute();
然而,在进一步研究之后,每个人都说 "avoid async void
! it will crash your system." 好吧,但我的情况还有什么选择呢?会不会
public async Task Execute()
{
// Query Database
// Process records.
return null;
}
...
await myObject.Execute();
如果我的方法没有 return 任何东西(它可能会抛出 Exception
),我该如何使用 async
。
方法的 return 类型应该是 Task
但 async
方法的主体中不应有 return
语句。如果您正在 returning a Task<T>
并且任务本身会有结果,则该方法应该只使用 return
。
A Task
是一个 没有结果的任务 (但会指示它何时完成并传播异常),因此是一个 void 方法,该方法 没有结果(但指示何时完成并传播异常)是异步对应项。