Asynt/await 在 UI 层?还是不同?是的 UI

Asynt/await in UI layer ? or in different? Yes its UI

问题是旧的。 async/await的答案必须放在UI层下面

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

这是完全错误的。 UI层是唯一必须使用asyncawait的地方。他们 用于该层。

您的数据访问技术未指定,但从代码来看,我猜测它可能是基于 DataTable 的,这是有问题的,因为 DataTable 非常旧并且不支持 async。注意wrapping method bodies with Task.Run to "make them asynchronous" is an antipattern - those are actually fake-asynchronous methods,不是真正的异步。

如果我错了并且你的数据访问技术确实支持async,那么你应该能够使你的DAL方法async不使用 Task.Run。从 最低 级别开始(例如,任何方法 FetchDataBuffer 调用)并将它们更改为异步等价物。然后让 async 从那里成长。注意"letting async grow"表示使用async Task,不是async voidasync void in the BLL is definitely an antipattern.

但是如果我是对的并且您的 DAL 正在使用 DataTable,那么您需要决定是否切换到更新的数据访问技术。如果这不是您现在可以做的事情,那么我建议保留现有的 DAL 和 BLL 代码,并将 async/await 添加到 UI 层:

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

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