.net 异步Lambda函数< string>

mqxuamgl  于 2023-02-26  发布在  .NET
关注(0)|答案(4)|浏览(196)

我是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表达式可能返回voidTaskTask<T>,但它们都不能转换为'Func<string>'
您能帮助我如何在不更改GetTheID委托的签名(我的意思是不将其签名更改为Func<Task<string>>)的情况下修复此错误吗?

nhaq1z21

nhaq1z211#

你必须改变GetTheID的签名,没有其他的方法,所以正如错误提示,你需要改变GetTheID的类型为Func<Task<string>>,它必须返回一个TaskTask<T>,以便能够等待它:

public static Func<Task<string>> GetTheID;
kg7wmglp

kg7wmglp2#

从C# 7.1开始,您实际上可以拥有一个异步Main()函数,它使您能够在所描述的情况下使用await

static async Task<int> Main(string[] args)
{
    return await AsyncConsoleWork();
}
amrnrhlw

amrnrhlw3#

看起来您正在尝试将异步方法调整为以同步方式工作。
如果这是正确的上下文,您的方法可以是

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

xnifntxz4#

使用此:

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

相关问题