如何等待 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 () =>
{
...
我想声明一个匿名方法来获取新主题 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 () =>
{
...