【问题标题】:Transform private Predicate method to Async method将私有 Predicate 方法转换为 Async 方法
【发布时间】:2013-05-08 20:46:48
【问题描述】:

我有这个方法:

/// <summary>
/// Gets the query filter.
/// </summary>
/// <param name="queryText">The query text.</param>
/// <returns>The query filter predicate.</returns>
private Task<Predicate<int>> GetQueryFilter(string queryText)
{
    // Return the query filter predicate
    return new Predicate<int>(async(id) =>
    {
        // Get the employee
        StructuredEmployee employee = await LoadEmployee(id);
        // If employee not found - return false
        if (employee == null)
            return false;
        // Else if employee is found
        else
            // Check subject and body
            return (!string.IsNullOrWhiteSpace(employee.FirstName)) && employee.FirstName.Contains(queryText)
                || (!string.IsNullOrWhiteSpace(employee.MiddleName)) && employee.MiddleName.Contains(queryText)
                || (!string.IsNullOrWhiteSpace(employee.LastName)) && employee.LastName.Contains(queryText);
    });
}

我希望这个方法异步返回,即Task&lt;Predicate&lt;int&gt;&gt;。 我该怎么做呢? 目前我在async(id) 上有一个编译错误。

【问题讨论】:

  • 这只是返回一个谓词-您确定它是要异步运行的GetQueryFilter 方法,而不是谓词本身吗?如果你想要一个异步谓词,那是另一回事。如果你能在这里解释最终目的,那真的很有帮助。

标签: .net c#-4.0 .net-4.5 async-await winrt-async


【解决方案1】:

你问的没有多大意义。

Task&lt;Predicate&lt;int&gt;&gt; 是一个返回谓词的异步方法。

您要做的是编写一个异步执行的谓词。换句话说,Func&lt;int, Task&lt;bool&gt;&gt; 将是一个异步谓词。

private Func<int, Task<bool>> GetQueryFilter(string queryText)
{
  return new Func<int, Task<bool>>(async (id) =>
  {
    ...
  };
}

但实际的异步谓词可能不适用于任何调用它的代码。您必须确定处理该问题的最佳方法。

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多