.net asyn调用多个方法的示例

.net asyn调用多个方法的示例,.net,async-await,c#-5.0,.net,Async Await,C# 5.0,我正在学习异步编程,我不确定我的方向是否正确。我想调用多个方法async,但从我所读到的asyn应该从顶层开始,从底层开始。但在顶层,当我使用asyn方法时,编译器不能等待字符串 public static async void Method() { var classdemoAsyn = new DemoAsyn(); var t = await classdemoAsyn.DoSomeImportantWork("Start ").Result

我正在学习异步编程,我不确定我的方向是否正确。我想调用多个方法async,但从我所读到的asyn应该从顶层开始,从底层开始。但在顶层,当我使用asyn方法时,编译器不能等待字符串

    public static async void Method()
    {
        var classdemoAsyn = new DemoAsyn();
        var t = await classdemoAsyn.DoSomeImportantWork("Start ").Result;
    } 

public class DemoAsyn
{
    public async Task<string> DoSomeImportantWork(string strDoSomeWork)
    {
        strDoSomeWork = strDoSomeWork + " (1) Enter => so some important work";
        Console.WriteLine("**********Enter => so some important work******");
        var t = await SomeComplexOperation(strDoSomeWork);
        Console.WriteLine("***********End Do some important work***********");
        return t;
    }

    public Task<string> SomeComplexOperation(string StrDoSomeComplexWork)
    {
        string str =StrDoSomeComplexWork + "Enter => very very complex work";
        Console.WriteLine(str);
        return Task.Factory.StartNew(() => {return str; });
    }

}
公共静态异步void方法()
{
var classdemosyn=新的demosyn();
var t=等待类Demasyn.DoSomeImportantNetwork(“开始”).Result;
} 
公共类Demasyn
{
公共异步任务DoSomeImportantWork(字符串strDoSomeWork)
{
strDoSomeWork=strDoSomeWork+“(1)输入=>so一些重要的工作”;
WriteLine(“************回车=>所以一些重要的工作*******”;
var t=等待某个复杂操作(strDoSomeWork);
Console.WriteLine(“*************结束做一些重要的工作**********”);
返回t;
}
公共任务SomeComplexOperation(字符串strDosOMComplexWork)
{
string str=StrDoSomeComplexWork+“Enter=>very-very-very-very-very-very-very-complexwork”;
控制台写入线(str);
return Task.Factory.StartNew(()=>{return str;});
}
}

您得到的错误是因为您同时使用了
.Result
wait
(正如Daniel Kelley已经指出的那样)

在控制台应用程序中使用
async
的一种常见的简单方法是使用顶级
async任务
方法,并在
Main()
方法中同步等待它(这几乎是
wait()
Result
在异步使用代码时有意义的唯一地方),例如:


另一种选择是使用。

这是什么类型的应用程序(UI或ASP.NET)?另外,您的“工作”是CPU受限还是I/O?您得到编译器错误是因为您正在等待任务的
结果,而不是任务本身。删除
.Result
,该错误应该会消失,尽管您的代码还有其他问题。它是一个小型控制台应用程序,@StephenCleary。我刚开始学习async所有我想要实现的东西写了几个方法从上到下都是async。@DanielKelley我想当在顶层访问结果以避免死锁时,该方法应该是异步的,带有等待函数吗?
void Main()
{
    MainAsync().Wait();
}