Async Lambda Func <string> - PullRequest
       2

Async Lambda Func <string>

0 голосов
/ 24 декабря 2018

Я новичок с async / await, и я получаю ошибку в своем коде, что я не могу понять, как это исправить:

public static Func<string> GetTheID;

void Main()
{
    GetTheID = async () => await GetMyId(); //Error here!

    Console.WriteLine(GetTheID);
}

public async Task<string> GetMyId()
{
    return await Task.Run(() =>
    {
        return "AAABBBB";
    });
}

Я получаюэта ошибка:

Невозможно преобразовать асинхронное лямбда-выражение в тип делегата 'Func<string>'.Асинхронное лямбда-выражение может возвращать void, Task или Task<T>, ни одно из которых не может быть преобразовано в 'Func<string>'

Не могли бы вы помочь мне, как исправить эту ошибку без изменения подписиделегата GetTheID (я имею в виду, не меняя его подпись на Func<Task<string>>)?

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

используйте это:

void Main()
{
    GetTheID = () => GetMyId().GetAwaiter().GetResult();
    Console.WriteLine(GetTheID);
}
0 голосов
/ 24 декабря 2018

Кажется, что вы пытаетесь адаптировать асинхронный метод для синхронной работы.

Если это правильный контекст, ваш подход может быть

void Main()
{
    GetTheID = () => GetMyId().Result;
    Console.WriteLine(GetTheID.Invoke());
}
0 голосов
/ 24 декабря 2018

Вы должны изменить подпись GetTheID, и другого пути нет.Итак, как следует из ошибки, вам нужно изменить тип GetTheID на Func<Task<string>>, он должен вернуть Task или Task<T>, чтобы иметь возможность его ждать:

public static Func<Task<string>> GetTheID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...