如何包装异步方法的结果

时间:2015-04-11 14:08:04

标签: c# asynchronous

如何将异步方法的结果包装到我自己的包装器类(MyEnvelop)中并将其作为任务返回?

我使用自定义Envelope类将数据访问组件的结果返回到业务层。 这适用于同步方法,但如何在异步模式下返回MyEnvelope类型的结果?

更新代码示例:

  public async Task<MyEnvelope<Customer>> FindAsync(params object[] keyValues)
    {
        using (var nw = new NWRepository())
        {
        Customer result = await  nw.DoSomethingAsync<Customer>(keyValues);
        return // here I would like to return new MyEnvelope<Customer>(result)
               // wrapped in Task as shown in the signature
                }
            }

2 个答案:

答案 0 :(得分:3)

你想要做的是:

public async Task<MyEnvelope<Customer>> FindAsync(params object[] keyValues)
{
    using (var nw = new NWRepository())
    {
         Customer c = await  nw.FindAsync<Customer>(keyValues);
          return new MyEnvelope<Customer>(c);
    }
 }
然后你可以这样调用这个方法:

MyEnvelope<Customer> customer = await FindAsync(p1, p2, p3);

请记住await将返回Result的{​​{1}} Task<T>类型T而不是Task对象本身。

答案 1 :(得分:0)

无法完成,因为您需要先解决任务才能将其传递给MyEnvelope。您可以获得的最接近的内容是删除解包该任务的async/await个关键字并获取Task<Customer>

public Task<Customer> FindAsync(params object[] keyValues)
{
    using (var nw = new NWRepository())
    {
        return nw.DoSomethingAsync<Customer>(keyValues)
    }
}