Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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
C# Is.GetAwaiter().GetResult();一般使用安全吗?_C#_Multithreading_Asynchronous_Async Await - Fatal编程技术网

C# Is.GetAwaiter().GetResult();一般使用安全吗?

C# Is.GetAwaiter().GetResult();一般使用安全吗?,c#,multithreading,asynchronous,async-await,C#,Multithreading,Asynchronous,Async Await,我在一些地方读到.GetAwaiter().GetResult()可能会导致死锁,我们应该使用async/wait。但是我看到很多使用这个的代码示例。可以用它吗?在哪些情况下它会死锁?还有什么我应该用的吗,比如Task.Wait?正如我在博客上描述的那样。在UI线程上或在ASP.NET上下文(对于预核心ASP.NET)中调用时最常见 Wait也有同样的问题。适当的修复方法是使用wait,并使调用代码异步 请注意,控制台应用程序中的Main方法是此规则的例外;在那里使用是非常合适的。许多代码示例都

我在一些地方读到
.GetAwaiter().GetResult()
可能会导致死锁,我们应该使用
async
/
wait
。但是我看到很多使用这个的代码示例。可以用它吗?在哪些情况下它会死锁?还有什么我应该用的吗,比如
Task.Wait

正如我在博客上描述的那样。在UI线程上或在ASP.NET上下文(对于预核心ASP.NET)中调用时最常见

Wait
也有同样的问题。适当的修复方法是使用
wait
,并使调用代码异步


请注意,控制台应用程序中的
Main
方法是此规则的例外;在那里使用是非常合适的。许多代码示例都以这种方式使用它。

我认为WebApi服务也是如此,对吗?@Cyan:是的,任何类型的ASP.NET请求上下文。预核,即;请求上下文已在ASP.NET Core中删除。“控制台应用程序中的Main方法是此规则的一个例外;在那里使用它非常合适。许多代码示例都以这种方式使用它。”这里有一个完美的观点。谢谢@Martin:我假设您的意思是,您正在使用线程本地状态或其他需要专用线程的机制,并且您不希望使代码异步。在这种情况下,当然,只需使用
GetAwaiter().GetResult()
。我假设你的专用线程是无上下文的,所以它不应该死锁。@Steven.Xi:一般情况下不会。在特定的场景中,这是可以做到的。看见