创建自定义异步函数(不调用另一个.net异步方法)

时间:2013-01-31 10:46:28

标签: c# .net

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

是否可以创建一个不调用.net async方法的自定义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关键字没用(因为没有等待),但是我不需要等待,我只需要等待这种方法的可能性

2 个答案:

答案 0 :(得分:2)

async关键字的主要用途是启用await关键字。没有async的{​​{1}}方法没有多大意义,因此编译器警告。

您可以在不使用await的情况下实施Task - 返回方法:

async

如果您想从头开始创建自己的public Task DoStuffAsync(int n) { return Task.Delay(1000); } ,请使用TaskTask.Run(或其中一个快捷方式,例如TaskCompletionSource<T>Task.FromResult )。

P.S。您通常希望避免TaskFactory.FromAsync;请改用async void

答案 1 :(得分: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);
}