我正在學習線程這些天,並在創建一個同步和異步任務之間感到困惑。我寫了一段代碼,它不起作用。可以有人給我提示這裏有什麼問題。同步任務不工作
我知道這可能是一個簡單的問題,但會真正幫助我獲得這個概念。
我想要什麼 - 同步任務1只應在同步任務2和同步任務3異步後才提供數據。
此外,我想通過任務來做,而不是線程,如果有人可以幫助。
在此先感謝。
using System;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
var syncTask1 = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "1");
});
var syncTask2 = new Task(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
{
Console.WriteLine(ctr.ToString() + "2");
}
});
syncTask2.Start();
var syncTask3 = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "3");
});
// syncTask.RunSynchronously();
Console.ReadLine();
}
}
所有這些任務都是異步的,它們都將在與主線程不同的線程上執行。如果你想要任務有一個序列,讓他們有一個序列 - 例如'await','ContinueWith'。最後,'RunSynchronously'不會做你認爲它的工作(我同意這個名字很混亂) - 閱讀文檔。 – Luaan
謝謝,先生,我不想使用異步,並等待,因爲我沒有要求.NET框架版本支持。此外,其因爲我正在學習,並想知道任何其他方法。 – vic90
如果你有'任務',你也有'等待'。兩者都需要相同的.NET版本,'await'只是一個編譯器的東西 - 您可以使用Async Targetting Pack將「await」「回溯」到.NET 4.0。如果你仍然想避免「await」(一個非常糟糕的主意,特別是當你不知道你在做什麼),ContinueWith' *是另一種方法 - 一個在4.0中本地支持的方法,以及主要的方法在沒有「await」的情況下處理任何異步工作流程。 – Luaan