如何正确使用异步等待

ego*_*n12 2 .net c# task-parallel-library async-await

我尝试了async/await的一些东西,但我真的没有得到它.我想要开始的所有内容是同时从两个不同的线程写入控制台.这是代码:

static void Main(string[] args)
{
    DoSomethingAsync();

    for (int i = 0; i < 1000; i++)
        Console.Write(".");

    Console.ReadLine();
}

static async void DoSomethingAsync()
{
    Console.WriteLine("DoSomethingAsync enter");

    //This does not seem good
    await Task.Delay(1);

    for (int i = 0; i < 1000; i++)
        Console.Write("X");

    Console.WriteLine("DoSomethingAsync exit");
}
Run Code Online (Sandbox Code Playgroud)

使用Threads很容易但是使用async/await我只能在完成这个奇怪的操作时完成它

await Task.Delay(1);
Run Code Online (Sandbox Code Playgroud)

我看到的大多数基本例子都使用过它 但是,当你想做一些不同步的时间时,该怎么做?你不能等待任何东西,因此所有代码都在主线程上运行.如何在不使用Task.Delay()的情况下实现与此代码相同的行为?

i3a*_*non 8

并行和并发不是一回事.如果您希望for并行执行循环,则Task.Run将该工作卸载到另一个ThreadPool线程:

static void Main(string[] args)
{
    var task = Task.Run(() => DoSomething());

    for (int i = 0; i < 1000; i++)
        Console.Write(".");

    task.Wait() 
}

static void DoSomething()
{
    for (int i = 0; i < 1000; i++)
        Console.Write("X");
}
Run Code Online (Sandbox Code Playgroud)

async-await用于异步操作,可以同时运行但不一定.