2

似乎所有异步示例最终都调用了 .net 异步方法,

是否可以创建async不调用 .net方法的自定义async方法?

这是我到目前为止的地方:

    [Test]
    public void Test()
    {
        TestAsync();
    }

    public async void TestAsync()
    {
        await DoStuffAsync(1);

        Task.Run(() => DoStuffAsync(73));

        await Task.WhenAll(DoStuffAsync(2), DoStuffAsync(3));
    }

    public async Task DoStuffAsync(int n)
    {
        Thread.Sleep(1000);
        Console.WriteLine("done stuff " + n);
    }

唯一的问题是 VS 说 DoStuffAsync 中的 async 关键字没用(因为没有等待),但我不需要等待,我只需要等待这个方法的可能性

4

2 回答 2

2

关键字的主要目的async是启用await关键字。没有an 的async方法没有await多大意义,因此会发出编译器警告。

您可以在没有 的情况下实现Task-returning 方法async,如下所示:

public Task DoStuffAsync(int n)
{
  return Task.Delay(1000);
}

Task如果您想从头开始创建自己的s,请使用Task.Runor TaskCompletionSource<T>(或其快捷方式之一,例如Task.FromResultor TaskFactory.FromAsync)。

PS您通常要避免async void;改为使用async Task

于 2013-01-31T13:10:42.240 回答
1
public async void TestAsync()
{
    await DoStuffAsync(1);

    await DoStuffAsync(73);

    await Task.WhenAll(DoStuffAsync(2), DoStuffAsync(3));
}

public async Task DoStuffAsync(int n)
{
    await Task.Delay(1000);
    Console.WriteLine("done stuff " + n);
}
于 2013-01-31T11:01:56.713 回答