【发布时间】:2015-06-28 06:25:06
【问题描述】:
我正在开发异步 CQS API
WebAPI 方法如下所示
public async Task<object> Get([FromUri] Contract contract)
{
return await _invoker.Invoke(CreateDto<Query>(contract));
}
不能隐式转换类型 '
System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<Customer>>' 到'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> 暴露为任务有什么原因吗?如果我从任务更改为普通任务,它将不起作用。它仍然是一个任务,所以 WebApi 应该能够用一些魔法来解决这个问题?我想做这个
public Task Get([FromUri] Contract contract)
{
return _invoker.Invoke(CreateDto<Query>(contract));
}
【问题讨论】:
-
现在它返回一个 Task
-
有什么理由声明它返回
Task<object>而不是普通的旧Task? -
你不能有返回值?这样做时,WebApi 不会显示任何内容
-
错误消息提示
_invoker.Invoke返回Task<IEnumerable<Customer>>但您的Invoke代码返回Task<object>。这种类型从何而来?等待任务后,您应该能够将结果上载到object。 -
不能将返回值转换为对象吗?抱歉,我无法在控制台中轻松复制。
标签: c# asynchronous asp.net-web-api async-await