我必须将方法用作async
并返回Task<bool>
。但是我得到的await
关键字无法在编译时自行等待字符串错误。我试图从方法中返回bool但是徒劳。这是我的方法..
public async Task<bool> searchName(string Name)
{
Group retrievedGroup = new Group();
string foundGroup = null;
try
{
foundGroup = await Client().Groups
.Where(group => group.DisplayName.Equals(Name))
.ExecuteAsync().Result.ToString();
if (foundGroup == "Some Name")
{
return true;
}
else
{
return false;
}
}
catch (){ }
}
答案 0 :(得分:6)
问题只是运营商的优先事项。
使用括号。您还应删除var views = [
path.join(__dirname, 'views'),
path.join(__dirname, 'controllers/signups/views')
];
app.set('views', views);
。
Result
dot(foundGroup = (await Client().Groups
.Where(group => group.DisplayName.Equals(Name))
.ExecuteAsync()).ToString();
)具有比等待更高的优先级,所以当你有
.
等待foundGroup = await Client().Groups
.Where(group => group.DisplayName.Equals(Name))
.ExecuteAsync().Result.ToString();
。还要注意你有
ToString();
访问任务的ExecuteAsync().Result.ToString();
会导致它执行,并且您将失去所有想要实现的异步条件。
答案 1 :(得分:4)
不要将Result
与async-await一起使用,因为它只会同步阻止您的方法调用。相反,只需Task.Result
:
await
旁注:
public async Task<bool> SearchNameAsync(string Name)
{
Group retrievedGroup = new Group();
List<string> foundGroup = await Client().Groups
.Where(group => group.DisplayName.Equals(Name))
.ExecuteAsync();
return foundGroup.Contains("Some Name", StringComparer.OrdinalIgnoreCase);
}
块,当您尝试调试代码并且不理解为什么此方法返回catch
而不是抛出时,它们会使您的生活更加艰难。或者至少记录一下。false
代替string.Equals
,因为您可能希望提供==
选项,例如,如果您想要进行不区分大小写的搜索。