【发布时间】:2017-08-04 09:10:17
【问题描述】:
我对 Async Await 概念有点陌生。在存储库中有以下方法
public TEntity Get(int id)
{
return Context.Set<TEntity>().Find(id);
}
我从另一个方法调用这个方法
BindingSource.DataSource = unitOfWork.ClientDemos.Get(newClient.ClientId);
我想对此进行异步处理,因为这可能需要一段时间,具体取决于服务器速度等。我该怎么做?我疲倦的每一种方式都给我带来了不同类型的错误。我不想用我的错误方法来打扰你们。但这是我尝试过但没有奏效的东西。
Task <IEnumerable<ClientDemographic>> tsk= new Task <IEnumerable<ClientDemographic> >(unitOfWork.ClientDemos.Get(newClient.ClientId));
tsk.Start();
BindingSource.DataSource = await tsk;
当没有要传递的参数并且返回类型为 int 时,它会产生奇迹。像下面这样。这个效果很好。
Task<int> tsk = new Task<int>(unitOfWork.Complete);
tsk.Start();
rej = await tsk;
请对此事有所了解。对此,我真的非常感激! 干杯! 谢谢!
【问题讨论】:
-
使用
Task.Run并花一些时间阅读这个msdn.microsoft.com/en-us/magazine/jj991977.aspx -
显示更多来自具有
BindingSource.DataSource = unitOfWork.ClientDemos.Get(newClient.ClientId);的方法的代码,这可以而且应该在没有Task.Run或new Task的情况下完成,但是为了给你一个很好的例子,我们需要看看这个方法设置该数据绑定。此外,您确实应该检查您在Context.Set<TEntity>().Find(id);调用中使用的库的文档,很可能会有一个FindAsync(id)调用,您可以执行并等待,而不是在另一个线程上执行.Find。最后,关于您展示的示例不起作用的地方。
标签: c#