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

时间:2019-03-01 03:58:18

标签: 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 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 个答案:

答案 0 :(得分:4)

这里没有使该方法async的用例,只需返回一个List<string>

public List<string> GetList()
{
    List<string> toReturn = new List<string>();
    toReturn.Add("hello");
    toReturn.Add("world");
    return toReturn;
}

但是,如果有一些 IO 或其他需要在async中进行的GetList调用,则可以执行以下操作

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;
}

更新

或模拟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);
}

更新

如Rufo爵士所言,asyncawait有很多地方,Stephen Cleary是一个很好的起点,他是有关此类主题的博文丰富的博主< / p>