似乎所有异步示例最终都调用了.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关键字没用(因为没有等待),但是我不需要等待,我只需要等待这种方法的可能性
答案 0 :(得分:2)
async
关键字的主要用途是启用await
关键字。没有async
的{{1}}方法没有多大意义,因此编译器警告。
您可以在不使用await
的情况下实施Task
- 返回方法:
async
如果您想从头开始创建自己的public Task DoStuffAsync(int n)
{
return Task.Delay(1000);
}
,请使用Task
或Task.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);
}