.Net 中的多任务

Posted

技术标签:

【中文标题】.Net 中的多任务【英文标题】:MultiTask in .Net 【发布时间】:2021-10-16 08:29:16 【问题描述】:

正如代码注释所要求的那样。我不知道为什么等待“continuation.Result”的主线程在打印出它的值之前有值。

static void Main(string[] args)

    Task<string> antecedent = Task.Delay(5000).ContinueWith<string>(x => 
    
        Console.WriteLine("return in task1 0", Thread.CurrentThread.ManagedThreadId);

        return DateTime.Today.ToShortDateString();
    );
    
    Task<string> continuation = antecedent.ContinueWith(x => 
    
        x.Wait(1000);
        Console.WriteLine("return in task2 01",Thread.CurrentThread.ManagedThreadId,x.Status);
        return "Today is " + antecedent.Result;
    );

    Console.WriteLine("this will print before the result");

    Console.WriteLine(continuation.Result); //why this waiting ?

    Console.ReadKey();

【问题讨论】:

【参考方案1】:

我不知道为什么等待“continuation.Result”的主线程在打印出它的值之前有值。

您还期望它做什么?它不能在之前打印它拥有的值。

Task.Result 在内部等待任务:

访问属性的 get 访问器会阻塞调用线程,直到异步操作完成

【讨论】:

以上是关于.Net 中的多任务的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统中的多任务学习

Silverlight 中的多任务和多线程

iOS 4.0 中的多任务处理对开发人员有何影响?

用于理解 Java 中的多线程的简单任务

python 并发专题(十三):asyncio 协程中的多任务

python 并发专题(十三):asyncio 协程中的多任务