консольное приложение async / await не возвращает мой список - PullRequest
0 голосов
/ 01 марта 2019

Почему не компилируется следующий код?Я просто пытаюсь вернуть простой список.

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 голосов
/ 01 марта 2019

Здесь нет прецедента, чтобы сделать этот метод 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);
}

Обновление

Как уже упоминал сэр Руфо, в этом async и await есть много хорошего, чтобы начать с Stephen Cleary , он очень хорошо сформулированный блоггер на такие темы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...