C# 控制台应用程序异步/等待不返回我的列表

C# 控制台应用程序异步/等待不返回我的列表,c#,async-await,C#,Async Await,为什么下面的代码不编译?我只是想得到一个简单的列表 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { var list = MainAsync(args).Wait(); //Compile error: Cannot assign void to an implicitly-typed

为什么下面的代码不编译?我只是想得到一个简单的列表

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = MainAsync(args).Wait();
            //Compile error: Cannot assign void to an implicitly-typed variable
        }

        static async Task MainAsync(string[] args)
        {
            Bootstrapper bs = new Bootstrapper();
            var list = await bs.GetList();
        }
    }

    public class Bootstrapper
    {
        public async Task<List<string>> GetList()
        {
            List<string> toReturn = new List<string>();
            toReturn.Add("hello");
            toReturn.Add("world");
            return await toReturn;
            //Compile error: 'List<string>' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'List<string>'
        }
    }
}
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
var list=mainsync(args.Wait();
//编译错误:无法将void分配给隐式类型的变量
}
静态异步任务mainsync(字符串[]args)
{
引导程序bs=新引导程序();
var list=wait bs.GetList();
}
}
公共类引导程序
{
公共异步任务GetList()
{
List toReturn=新列表();
toReturn.Add(“你好”);
toReturn.添加(“世界”);
返回等待返回;
//编译错误:“List”不包含“GetAwaiter”的定义,并且没有扩展方法“GetAwaiter”接受类型为“List”的第一个参数
}
}
}

这里没有使此方法异步的用例,只需返回一个
列表

更新

或者另一种模拟
async
工作负载的方法是
Task.FromResult

private async Task<List<string>> Test()
{
    List<string> toReturn = new List<string>();
    toReturn.Add("hello");
    toReturn.Add("world");
    return await Task.FromResult(toReturn);
}
专用异步任务测试()
{
List toReturn=新列表();
toReturn.Add(“你好”);
toReturn.添加(“世界”);
返回等待任务。从结果返回(返回);
}
更新


正如鲁福爵士所提到的,这个
async
await
有很多内容,他是一个很好的开始,他在这些主题上是一个非常清晰的博客

你得到了什么编译错误?为什么
await
在返回语句中?用编译错误更新了代码。不熟悉async/await,所以我只是尝试一些简单易懂的东西。
mainSync
不返回值。为什么要在这里尝试将结果存储到
列表中
?我只是尝试模拟一个将填充列表的数据库调用,因为OP是async/Wait的新成员。您应该提到ConfigureWait(false),否则您会将其发送到未来deadlock@Rod阅读您发现大量async/awaitConfigureAwait(false)的地方仅当您在UI同步上下文(也是asp.net请求上下文)中启动任务时才需要,因为默认情况下所有工作都安排在UI线程上。控制台应用不会有这个问题,因为它会在线程池线程上调度任务。我还推荐克利里的这本书:
public async Task<List<string>> GetList()
{
    // now we have a reason to be async (barely)
    await Task.Delay(1000);
    List<string> toReturn = new List<string>();
    toReturn.Add("hello");
    toReturn.Add("world");
    return toReturn;
}
private async Task<List<string>> Test()
{
    List<string> toReturn = new List<string>();
    toReturn.Add("hello");
    toReturn.Add("world");
    return await Task.FromResult(toReturn);
}