我创建了2个打印x和y 100次的方法。我希望他们运行并发,我希望输出是xxxxyxyxyyyxyyxyx ...这样的sthg。 它不打印任何东西。我在这里错过了一些逻辑吗?
using System;
using System.Threading.Tasks;
namespace ConsoleApplication32
{
internal class Program
{
public static async Task<int> Print1()
{
await Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
Console.Write("x");
}
});
return 1;
}
public static async Task<int> Print2()
{
await Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
Console.Write("y");
}
});
return 1;
}
public static void Run()
{
Task<int> i = Print1();
Task<int> k = Print2();
}
private static void Main(string[] args)
{
Run();
}
}
}
答案 0 :(得分:5)
尝试了你的代码并且运行得很好。可能你认为它不起作用,因为控制台窗口关闭得非常快。在主要广告中添加Test1
:
Console.ReadLine()
答案 1 :(得分:2)
问题在于您没有等待任务完成,因此程序正在终止(不再需要同步代码阻止)。
如果您希望任务同时运行,请改为执行此操作:
public static void Run()
{
Task<int> i = Print1();
Task<int> k = Print2();
Task.WaitAll(i, k);
}
等待完成此任务的另一种方法是:
public static async Task Run()
{
Task<int> i = Print1();
Task<int> k = Print2();
await Task.WhenAll(i, k);
}
public static void Main(string[] args)
{
Run().GetAwaiter().GetResult();
}