我正在学习线程这些天,并在创建一个同步和异步任务之间感到困惑。我写了一段代码,它不起作用。可以有人给我提示这里有什么问题。同步任务不工作
我知道这可能是一个简单的问题,但会真正帮助我获得这个概念。
我想要什么 - 同步任务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