ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#-UI层中的Asynt / await?或不同?是的,它的UI

2019-10-24 20:06:24  阅读:241  来源: 互联网

标签:async-await task n-tier-architecture c net


问题已经老了.异步/等待的答案必须放在下面的UI层中

解决方法:

What i need to make is get rid off await’s keywords and async in UI layer.

这是完全错误的. UI层是必须使用async和await的唯一地方.而且必须在该层中使用它们.

您的数据访问技术未指定,但是从代码中,我猜它可能是基于DataTable的,这是有问题的,因为DataTable太旧并且不支持异步.请注意,wrapping method bodies with Task.Run to “make them asynchronous” is an antipattern-实际上是fake-asynchronous methods,不是真正的异步.

如果我错了,并且您的数据访问技术确实支持异步,那么您应该能够使DAL方法异步,而无需使用Task.Run.从最低级别开始(例如FetchDataBuffer调用的任何方法),然后将其更改为异步等效项.然后让异步从那里成长.请注意,“让异步增长”意味着使用异步任务,而不是异步void. async void in the BLL is definitely an antipattern.

但是,如果我是对的,而您的DAL正在使用DataTable,那么您需要确定是否要切换到更新的数据访问技术.如果这不是您现在可以执行的操作,那么我建议保留现有的DAL和BLL代码,并仅向UI层添加async / await:

private async void BtnNext_ItemClick(object sender, ClickEventArgs e)
{
  await Task.Run(() => EntryLogic.MoveNext());
  DeserializeBuffer();
}

这不是反模式,因为我们使用Task.Run来调用方法-将其移出UI线程.这不是理想的,因为我们仍然使用了不必要的线程,但是理想的解决方案将需要真正的异步数据访问.通过这种妥协,您的DAL和BLL仍然处于阻塞状态,因此它们在桌面UI应用程序之外的使用受到限制.

标签:async-await,task,n-tier-architecture,c,net
来源: https://codeday.me/bug/20191024/1922941.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有