Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建自定义异步函数(不调用其他.net异步方法)_C#_.net - Fatal编程技术网

C# 创建自定义异步函数(不调用其他.net异步方法)

C# 创建自定义异步函数(不调用其他.net异步方法),c#,.net,C#,.net,似乎所有异步示例最终都会调用.net异步方法 是否可以创建不调用.netasync方法的自定义async方法 这就是我到目前为止所得到的: [Test] public void Test() { TestAsync(); } public async void TestAsync() { await DoStuffAsync(1); Task.Run(() => DoStuffAsync(7

似乎所有异步示例最终都会调用.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说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单击(..)