我想让一个函数变成异步的,所以我简单地添加了 async
,就像这样:
public async static void something(){
}
你可以看到这个函数的返回类型是void
,我只想异步地调用它而不会阻塞,因为返回值是void
,所以不需要await
。但是Visual Studio 2012不能编译它,它说我漏掉了
await
?请提供一个示例,使一个函数成为
async
而不使用await
。我想让一个函数变成异步的,所以我简单地添加了 async
,就像这样:
public async static void something(){
}
你可以看到这个函数的返回类型是void
,我只想异步地调用它而不会阻塞,因为返回值是void
,所以不需要await
。await
?async
而不使用await
。我认为你可能误解了async
的作用。警告是完全正确的:如果你将你的方法标记为async
但没有在任何地方使用await
,那么你的方法不会是异步的。如果你调用它,方法内部的所有代码都将同步执行。
另外,你应该尽量避免使用async void
方法,它们使处理异常变得困难。
await
会把它变成普通的函数调用吗?我不想等待它,我只想让它运行并完成任务,然后在完成后停止。 - PatrickTask.Run()
在另一个线程上运行它。 - svick改成
public async Task something(){
return await Task.Factory.StartNew(() => {
//TODO:
}
}
你不必等待任务返回 ;)
因此,您可以使用一个任务并删除async和await,然后您会得到:
public Task something(){
return Task.Factory.StartNew(() => {
//TODO:
}
}
如果您不使用通用的返回类型参数,则任务为 implicit void。