如何等待 Func<Task<string>>?

How to await Func<Task<string>>?

我想声明一个匿名方法来获取新主题 ID。一切都很好,除了 await 这个重新 运行.

的匿名方法

我的测试代码:

public async Task<int> AddNewTopic()
{
    using (var db = new MyDatabase()) //EF
    {
        Func<Task<string>> id = async () =>
        {
            var random = new Random();
            var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
                   .ToCharArray();
            string _id = string.Empty;

            for (byte i = 0; i < 32; i++)
            {
              _id += chars[random.Next(0, chars.Length)].ToString();
            }

            bool isExist = await db.Topics.SingleOrDefaultAsync(m => m.Id == _id) != null;

            //if this id already exists, try again...
            return !isExist ? _id : await id(); //error: Use of unassigned local variable id

            //I've tried:
            //return ""; //That's okay. No problem here.
        };

    //do stuff...
    }
}

它在行 await id():

中抛出一条错误消息

Use of unassigned local variable id

为什么要先赋值一个Func?我不认为是这种情况:

int a;
int b = a; //Use of unassigned local variable a

此外,the doc 没有说 Func 需要默认值。

你能解释一下为什么吗?

您在其声明中使用了一个变量。这个问题可以通过在声明上赋值null来解决。

Func<Task<string>> id = null;
id = async () => 
    {
       ...