等待Task.CompletedTask是否意味着async方法将同步运行? - c#

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

等待异步方法中已完成的任务 - c#

当我们调用异步方法时,我们返回一个包装器任务。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…