这些天我正在学习线程并且在创建同步和异步任务之间感到困惑。我写了一段代码并且它不起作用。可以有人给我提示这里有什么问题。
我知道这可能是一个简单的问题,但真的会帮助我获得这个概念。
我想要什么 - 同步任务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();
}
}
答案 0 :(得分:0)
没有同步和异步任务。您可以同步或异步调用(或等待)任务,但任务是相同的。
如果您想同步等待任务,您应该执行以下操作:
Task t = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "1");
});
t.Wait(); // waiting task synchronously
如果您想异步等待任务:
Task t = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "1");
});
await t; // waiting task asynchronously
但在这种情况下,您应将方法标记为async
-
(async await usage)
在你的例子中 - 要在第二和第三之后先等待,你应该这样做:
public static void Main()
{
var syncTask2 = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "2");
});
syncTask2.Wait();// wait for second task finishing synchronously
var syncTask3 = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "3");
});
syncTask3.Wait(); // wait for third task finishing synchronously after second
var syncTask1 = Task.Factory.StartNew(() =>
{
for (int ctr = 1; ctr <= 10; ctr++)
Console.WriteLine(ctr.ToString() + "1");
});
syncTask1.Wait(); // wait for third task finishing synchronously after second and third
Console.ReadLine();
}