异步Lambda Func <string>

时间:2018-12-24 09:52:11

标签: c# .net async-await

我是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";
    });
}

我收到此错误:

  

无法将异步Lambda表达式转换为委托类型   'Func<string>'。异步Lambda表达式可能返回voidTask或   Task<T>,都无法转换为'Func<string>'

能否请我在不更改GetTheID代表的签名的情况下解决此错误(我的意思是不将其签名更改为Func<Task<string>>)?

3 个答案:

答案 0 :(得分:3)

您必须更改GetTheID的签名,没有其他方法。因此,正如错误所建议的那样,您需要将GetTheID的类型更改为Func<Task<string>>,它必须返回TaskTask<T>才能等待:

public static Func<Task<string>> GetTheID;

答案 1 :(得分:1)

您似乎正在尝试使异步方法以同步方式工作。

如果这是正确的上下文,则您的方法可能是

void Main()
{
    GetTheID = () => GetMyId().Result;
    Console.WriteLine(GetTheID.Invoke());
}

答案 2 :(得分:0)

使用此:

void Main()
{
    GetTheID = () => GetMyId().GetAwaiter().GetResult();
    Console.WriteLine(GetTheID);
}