c# - 结果类型未知的任务

标签 c# asynchronous asp.net-web-api async-await

我正在开发异步 CQS API

WebAPI 方法如下所示

public async Task<object> Get([FromUri] Contract contract)
{
    return  await _invoker.Invoke(CreateDto<Query>(contract));
}

Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<Customer>>' to 'System.Threading.Tasks.Task<object>

如何在不知道类型的情况下从结果返回任务?

这是调用泛型类的代码

public Task<object> Invoke(Query query)
{
    var queryHandlerType = typeof(IQueryHandler<,>);
    var queryType = query.GetType();
    var queryResultType = queryType.BaseType.GetGenericArguments().First();
    var handler = _container.GetInstance(queryHandlerType.MakeGenericType(queryType, queryResultType)) as dynamic;
    return handler.Handle(query as dynamic);
}

编辑: WebApi 不支持 Task<T> 有什么原因吗?暴露为任务?如果我从 Task 更改为普通 Task,它就不起作用。它仍然是一个任务,所以 WebApi 应该能够用一些魔法来解决这个问题?我想做这个

public Task Get([FromUri] Contract contract)
{
    return _invoker.Invoke(CreateDto<Query>(contract));
}

最佳答案

这个问题有点困惑。特别不清楚错误消息的来源。根据您发布的小代码,我认为唯一有意义的是您实际上是在 return 收到该错误消息。您的声明Invoke()方法。 IE。那handler.Handle(query as dynamic)返回 Task<System.Collections.Generic.IEnumerable<Customer>> 类型的对象.这当然与Task<object> 不同。所以是非法的。

如果我理解正确,那么在我看来你可以通过更改你的 Invoke() 来解决这个问题。方法本身是 async ,这样你就可以重新包装最终返回的 System.Collections.Generic.IEnumerable<Customer> Result 中的对象的 Task<object>而不是 Task<System.Collections.Generic.IEnumerable<Customer>>当前正在生成:

public async Task<object> Invoke(Query query)
{
    var queryHandlerType = typeof(IQueryHandler<,>);
    var queryType = query.GetType();
    var queryResultType = queryType.BaseType.GetGenericArguments().First();
    var handler = _container.GetInstance(queryHandlerType.MakeGenericType(queryType, queryResultType)) as dynamic;
    return await handler.Handle(query as dynamic);
}


如果这不能解决您的具体问题,请编辑问题以使其更清楚。请提供a good, minimal, complete code example可靠地重现问题。

关于c# - 结果类型未知的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29766333/

相关文章:

c# - 在 ASP.NET Identity GetRolesAsync 中使用异步等待丢失 HttpContext

c# - 测试将对象作为参数的 GET 请求(Asp.NET WebApi Controller )

c# - 如何在 Visual Studio Performance Analyzer 中查看毫秒而不是样本百分比

c# - 使用 nuget 包的目标框架注意事项?

javascript - sendmail 传输的回调从未在 mocha 的 after Hook 中调用

javascript - 为什么innerHTML在for循环中不能正常工作?

c# - 项目设置 : Actual difference between Application and User scopes?

c# - 如何获取 ListView 数据模板项目双击WPF MVVM

c# - 单元测试异步函数

c# - Include 返回的 Entity Framework 限制属性