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# - jQuery ajax 发布当前日期时间 ASP.NET Web API

c# - .NET Core Web API 序列化问题

c# - DirectoryInfo.getFiles 开头为

c# - 不支持 NUnit 异步设置?

c# - 通过 WebAPI 异步调用进程

ios - 将图像数组下载为字节数组并转换为图像

c# - ASP.NET Web API Swagger(Swashbuckle)重复OperationId

asp.net - Controller 调用另一个 Controller C# WebApi

c# - 为什么在 C# 中使用 String.Concat()?

c# - 跟踪添加和删除的工作表