C# 创建自定义异步函数(不调用其他.net异步方法)
似乎所有异步示例最终都会调用.net异步方法 是否可以创建不调用.netC# 创建自定义异步函数(不调用其他.net异步方法),c#,.net,C#,.net,似乎所有异步示例最终都会调用.net异步方法 是否可以创建不调用.netasync方法的自定义async方法 这就是我到目前为止所得到的: [Test] public void Test() { TestAsync(); } public async void TestAsync() { await DoStuffAsync(1); Task.Run(() => DoStuffAsync(7
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说dostufasync中的async关键字是无用的(因为没有wait),但我不需要wait,我只需要等待这个方法的可能性async关键字的主要目的是启用
wait
关键字。没有wait的async
方法没有多大意义,因此编译器发出警告
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);
}
您可以在不使用async
的情况下实现任务
-返回方法,如下所示:
public Task DoStuffAsync(int n)
{
return Task.Delay(1000);
}
如果要从头开始创建自己的任务
s,请使用Task.Run
或TaskCompletionSource
(或其快捷方式之一,如Task.FromResult
或TaskFactory.FromAsync
)
另外,您通常希望避免
异步无效
;使用异步任务
。注意任务。FromResult
!=<代码>任务。运行Task.FromResult(Foo())
将被阻止,Task.Run(()=>Foo())
将不被阻止。另外,async void
适用于异步事件处理程序<代码>异步作废我的按钮\u单击(..)