从异步方法返回bool

时间:2015-12-28 13:25:39

标签: c# .net asynchronous async-await

我必须将方法用作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 (){ }
}

2 个答案:

答案 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

旁注:

  1. 在异步方法上使用“Async”后缀。
  2. 遵循.NET命名约定,即方法的PascalCase。
  3. 不要使用空的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而不是抛出时,它们会使您的生活更加艰难。或者至少记录一下。
  4. 我使用false代替string.Equals,因为您可能希望提供==选项,例如,如果您想要进行不区分大小写的搜索。