static async Task WaitTaskCompleted()
{
//Use Thread A before await Task.CompletedTask
await Task.CompletedTask;
//Will the code after await Task.CompletedTask always use Thread A, or there is chance to have a Thread B?
}
这意味着await Task.CompletedTask
始终总是实际上同步执行该方法?
参考方案
是的,此代码将始终同步运行;主要延续编译器goo仅在遇到第一个不完整的等待对象时被调用。
您可以在sharplab中看到它-特别是在这里:
awaiter = Task.CompletedTask.GetAwaiter();
if (!awaiter.IsCompleted)
{
num = (<>1__state = 0);
<>u__1 = awaiter;
<>t__builder.AwaitUnsafeOnCompleted(ref awaiter, ref this);
return;
}
实现异步性的是AwaitUnsafeOnCompleted(...)
+ return
。
当我们调用异步方法时,我们返回一个包装器任务。public async Task ExecuteActionAsync() { // no await called } public async Task ExecuteActionAwaitAsync() { // await called on a completed await Task.Complet…
如何监视和重新启动在C#中引发异常的任务? - c#假设我有一个实例化无限期运行的三个任务的程序。这些任务旨在并行运行。但是,可以说这些任务由于网络错误有时会引发异常。监视任务并在必要时重新启动它最简单的技术是什么?解决此问题的我的工作是监视Task.Status数据,并在任务出现故障时简单地调用Task.Start()方法。但是,此代码不起作用,因为任务异常会导致整个应用程序崩溃。using System;…
多重处理:map与map_async - python使用map和map_async有什么区别?将列表中的项目分配给4个进程后,它们是否运行相同的功能?因此,假设两者都在异步和并行运行是错误的吗?def f(x): return 2*x p=Pool(4) l=[1,2,3,4] out1=p.map(f,l) #vs out2=p.map_async(f,l) python大神给出的解决方案 将作业映射到流程…
如何正确地将HttpClient与async / await一起使用? - c#以下代码出现两个错误:public async Task<string> TestDownloadTask() { HttpResponseMessage response = null; using (HttpClient client = new HttpClient()) { client.BaseAddress = new Uri(@…
在单独的ThreadPool中执行某些后台任务,以避免饿死于在主线程中执行的关键任务 - c#在单独的ThreadPool中执行某些后台任务(非线程),以避免饿死于在主线程中执行的关键任务(非线程)我们的方案我们托管一个高容量的WCF Web服务,该服务在逻辑上具有以下代码:void WcfApiMethod() { // logic // invoke other tasks which are critical var mainTask = Ta…