Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 需要在异步调用时等待(),但良好的做法是不要阻止异步调用_.net_Asynchronous - Fatal编程技术网

.net 需要在异步调用时等待(),但良好的做法是不要阻止异步调用

.net 需要在异步调用时等待(),但良好的做法是不要阻止异步调用,.net,asynchronous,.net,Asynchronous,我刚开始使用async和wait并试图巩固我的理解。我想保证异步函数完成 据我所知,await实际上并不保证异步函数将运行(而是保存状态并跟踪异步函数的调用方停止的位置) 因此,为了保证异步任务完成,我尝试了task.Delay(1000),但我认为这不是值得生产的代码。我使用的是.Wait(),另一篇stackoverflow帖子说这是一种糟糕的做法,因为它混合了同步调用和异步调用(.Wait(),.Result()都是同步块) 如何保证在不使用.wait()或.result()的情况下完成异

我刚开始使用
async
wait
并试图巩固我的理解。我想保证异步函数完成

据我所知,
await
实际上并不保证异步函数将运行(而是保存状态并跟踪异步函数的调用方停止的位置)

因此,为了保证异步任务完成,我尝试了
task.Delay(1000)
,但我认为这不是值得生产的代码。我使用的是
.Wait()
,另一篇stackoverflow帖子说这是一种糟糕的做法,因为它混合了同步调用和异步调用(
.Wait(),.Result()
都是同步块)

如何保证在不使用
.wait()
.result()
的情况下完成异步调用

如何保证在不使用.wait()或.result()的情况下完成异步调用

等待
/
结果
将同步阻止,直到异步调用完成

wait
将异步等待,直到异步调用完成

它们都提供相同级别的“保证”。

等待异步方法:

public async void Main()
{
  var result = await AsyncMethodAsync();
}
保证在异步方法结束时从
asynchmethodasync()
填充结果变量,或者在asynchmethodasync()内部发生异常时引发异常。
调用
.Result
Wait()
不保证任何事情,并且阻塞了主线程

不是完整的答案,而是
。Wait
。Result
是等待完成的方法。他们可能不是最好的,但他们工作。另一篇文章可能意味着您通常应该编写允许异步调用的代码,但有时您只需要执行同步调用,这就是为什么这些方法存在的原因。