[英]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.