小编Mar*_*ora的帖子

在Console/Win服务应用程序中不需要ConfigureAwait(false),对吗?

我一直在使用async/ await一段时间,但最近深入研究,并阅读了许多最佳实践提示,默认情况下总是ConfigureAwait(false)用来防止死锁并提高性能.

我只是想确保我没有遗漏某些东西,当我认为这只适用于实际电流SynchronizationContextTaskScheduler播放时,对吗?

如果我有一个响应消息/命令/等的Windows服务应用程序.异步,它总是只使用默认的调度程序=可能是等待完成的相同的线程池线程将执行延续,因此没有死锁和使用时没有性能差异ConfigureAwait(false),对吗?

这不是我不能把它放在那里,但我非常讨厌噪音代码......

c# asynchronous

14
推荐指数
1
解决办法
2066
查看次数

继续链接不按预期工作

我有这个示例代码:

    static void Main(string[] args) {
        var t1 = Task.Run(async () => {
            Console.WriteLine("Putting in fake processing 1.");
            await Task.Delay(300);
            Console.WriteLine("Fake processing finished 1. ");
        });
        var t2 = t1.ContinueWith(async (c) => {
            Console.WriteLine("Putting in fake processing 2.");
            await Task.Delay(200);
            Console.WriteLine("Fake processing finished 2.");
        });
        var t3 = t2.ContinueWith(async (c)  => {
            Console.WriteLine("Putting in fake processing 3.");
            await Task.Delay(100);
            Console.WriteLine("Fake processing finished 3.");
        });
        Console.ReadLine();
    }
Run Code Online (Sandbox Code Playgroud)

控制台输出让我困惑:

  • 进行假加工1.
  • 假加工完成1.
  • 进行假加工2.
  • 进行假加工3.
  • 假加工完成3.
  • 假加工完成2.

我试图将任务链接起来,以便一个接一个地执行,我做错了什么?我不能使用等待,这只是示例代码,实际上我正在排队传入的任务(一些是异步的,一些不是)并且希望以它们进入的相同顺序执行它们但没有并行性,ContinueWith似乎比创建更好一个ConcurrentQueue并自己处理每一个,但它只是不起作用...

c# task task-parallel-library

5
推荐指数
1
解决办法
873
查看次数

标签 统计

c# ×2

asynchronous ×1

task ×1

task-parallel-library ×1