当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何等待Func<Task<string>>?》经验,为你挑选了1个好方法。

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

我的测试代码:

public async Task AddNewTopic()
{
    using (var db = new MyDatabase()) //EF
    {
        Func> 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():

使用未分配的局部变量id

为什么Func需要之前分配?我不认为这是这种情况:

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

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

你能解释一下为什么吗?



1> Hamid Pourja..:

你正在使用它的声明变量.通过在声明上指定null可以解决该问题.

Func> id = null;
id = async () => 
    {
       ...

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有