C# Asp.Net中的任务和线程调度
在Asp.Net网页按钮中单击我有以下代码C# Asp.Net中的任务和线程调度,c#,asp.net,.net,multithreading,task-parallel-library,C#,Asp.net,.net,Multithreading,Task Parallel Library,在Asp.Net网页按钮中单击我有以下代码 //Code is running on Asp.Net worker Thread var httpClient = new HttpClient(); var task = httpClient.GetAsync("/someapiCall"); //Creates a new thread and executed on it task.Wait(); 现在,当我调用task.Wait时,工作线程会发生什么情况 它是否会处于挂起状态,等待ht
//Code is running on Asp.Net worker Thread
var httpClient = new HttpClient();
var task = httpClient.GetAsync("/someapiCall"); //Creates a new thread and executed on it
task.Wait();
现在,当我调用task.Wait时,工作线程会发生什么情况
var httpClient = new HttpClient();
var task = httpClient.GetAsync("/someapiCall"); //Creates a new thread and executed on it
ManualResetEvent mre = new ManualResetEvent(false);
task.ContinueWith((t) => { mre.Set(); });
mre.WaitOne();
在这两种情况下,线程将被同步阻止,等待操作完成。它不会返回到
线程池
如果您通过使用Wait
显式阻塞,或者通过等待将在异步操作完成后设置的ManualResetEvent
隐式阻塞,则没有区别
在异步
操作上同步阻塞可能会导致UI环境中的死锁(以及存在同步上下文
的其他情况,即ASP.Net)
要不阻止该线程,应使用async wait
:
await new HttpClient().GetAsync("/someapiCall");
使用await意味着我必须使用异步页面处理程序,对吗?否则,即使在异步任务完成之前,响应也会返回到浏览器。@SriHarshaVelicheti我相信是这样的。看看