35

我想让一个函数异步,所以我简单地添加async如下:

public async static void something(){
}

你可以看到它的返回类型是void. 我只是希望这个函数被异步调用而不阻塞,因为 return 是void不需要await的。

但是 Visual Studio 2012 无法编译它,它说我想念await

您能否提供一个async不使用await.

4

2 回答 2

37

我认为也许你误解了什么async。警告是完全正确的:如果您标记您的方法async但不在await任何地方使用,那么您的方法将不是 asynchronous。如果调用它,方法内的所有代码都会同步执行。

此外,您应该尽量避免使用async void方法,它们会使处理异常变得困难。

于 2012-08-18T08:00:48.820 回答
-1

改成

public async Task something(){
  return await Task.Factory.StartNew(() => {
      //TODO:
  }
}

您不必等待返回的任务;)

所以或者你可以只使用一个任务并删除 async 和 await 然后你得到:

public Task something(){
  return Task.Factory.StartNew(() => {
      //TODO:
  }
}

任务隐含无效,如果您不使用通用返回类型参数

于 2021-10-14T20:20:18.423 回答