【问题标题】:Check if an async call has completed?检查异步调用是否已完成?
【发布时间】:2014-09-19 21:24:48
【问题描述】:

我有两个班级ViewPresenter

class Presenter 
{ 
    View _view;

    void OnViewLoad(object sender, EventArgs e)
    {
        _view.UpdateUIAsync();
        // need to
        // _view.UpdateUIAsync().then(....)
    }

现在我希望 OnViewLoad 方法在 _view.UpdateUIAsync() 完成后执行一些代码。现在我的解决方案是修改View.UpdateUIAsync() 以接受一个动作参数_view.UpdateUIAsync(Action<object> after) 并让View 在异步代码完成后执行它。像 Promise 模式一样,它是一种更好的方法吗?

View 类是一个 Winform 表单,使用 BackgroundWorker 进行异步,因为它使用 .Net 3.5。

【问题讨论】:

  • Task 可能是最接近 .Net Framework 一部分的 promises(也有 3.5 的版本 - RxExtensions)。

标签: c# .net winforms asynchronous .net-3.5


【解决方案1】:

如果您可以升级到更高版本的 .Net,您可以从 UpdateUIAsync 返回一个任务

.Net 4.5.

await _view.UpdateUIAsync() // .Net 4.5
// statement after 

.Net 4

_view.UpdateUIAsync().ContinueWith(...) // .Net 4.0

如果您无法升级,我想您必须坚持使用回调(就像您拥有的那样)或添加一个在操作完成时触发的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多