升级基于操作的事务管理器以支持异步/等待

时间:2018-03-20 11:20:24

标签: c# async-await

我有一个基于Action的{​​{1}}看起来像这样:

UndoRedoTransactionManager

在我的代码库中使用,如下所示:

public interface IUndoRedoTransactionManager
{
    bool CanDo { get; }
    bool CanUndo { get; }
    void ClearHistory();
    bool Do(Action doAction, Action undoAction, string description);
    bool Redo();
    void RedoAll();
    bool Undo();
    void UndoAll();
}

我正在制作一些新代码,我想在其中使用我的var done = false; _manager.Do(() => { Thread.Sleep(100); SomeUiWork(); done = true; }, () => { Thread.Sleep(100); UndoSomeUiWork(); done = false; }, "Description");

UndoRedoTransactionManager

根据我的理解,这个新代码创建了var done = false; _manager.Do(async () => { await Task.Delay(100); SomeUiWork(); done = true; }, async () => { await Task.Delay(100); UndoSomeUiWork(); done = false; }, "Description"); ,应该尽可能避免。它也不能保证它在没有阻塞的情况下运行。

我已经阅读了很多博客,但我无法理解它们将信息转换为我的情况(我是异步编程的新手,可能做了很多错误)

我的问题是:如何扩展基于async void的{​​{1}}以支持Action如何才能最好地解决我的问题问题?

我注意到我可以在界面中添加一个新方法:

UndoRedoTransactionManager

编译器会在使用async/await时自动选择这个(并告诉我等待它),但是我会遇到互换性问题。

我的完整Task<bool> Do(Func<Task> action, Func<Task> undoAction, string description); 实施:

async lambda

0 个答案:

没有答案