簡體   English   中英

澄清 C# 線程任務

[英]Clarification on C# Threading Tasks

我使用微軟的C#線程任務指令在這里

他們在最后聲明:

Result 屬性會阻塞調用線程,直到任務完成。

我認為這只是為一個函數創建一個線程,但仍然阻止主線程和調用函數的進程,就好像它是通過標准函數調用運行一樣嗎?

作為第二個問題,如果我將示例中的代碼修改為:

using System;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // Return a value type with a lambda expression
        Task<int> task1 = Task<int>.Factory.StartNew(() => 1);            

        // Return a named reference type with a multi-line statement lambda.
        Task<Test> task2 = Task<Test>.Factory.StartNew(() =>
        {
            string s = ".NET";
            double d = 4.0;
            return new Test { Name = s, Number = d };
        });

        int i = task1.Result;
        Test test = task2.Result;    
    }
}

它會同時創建和運行兩個線程,在返回任務之前運行函數嗎? 或者它會像我最初假設的那樣一次完成一個線程嗎?

你是對的,微軟的例子基本上會同步調用這些函數:

...
Task<int> task1 = Task<int>.Factory.StartNew(() => 1);
int i = task1.Result;

Task<Test> task2 = Task<Test>.Factory.StartNew(() =>
{
    string s = ".NET";
    double d = 4.0;
    return new Test { Name = s, Number = d };
});
Test test = task2.Result;
...

task1將在一個新線程中啟動,然后當前線程將阻塞,直到它返回其結果。 然后task2將在一個新線程中啟動...

對於您的示例,它們將同時運行。 task1被生成,然后task2 ,然后主線程等待task1的結果,然后是task2的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM