В C # у меня есть иерархия классов, которые выполняют действия, которые потенциально могут занять много времени. По этой причине я реализовал механизм развязки / обратного вызова, чтобы вызывающий не блокировался, а был информирован о завершении действия через интерфейс обратного вызова. Это выглядит примерно так:
protected delegate void ActionDelegate();
public void doAction()
{
Task.Factory.StartNew(() => DoActionASync());
}
private void DoActionASync()
{
DoActionImpl();
Caller->ActionDone(); // Caller is registered separately, and implements an interface (ICallback) that includes this function
}
protected abstract void DoActionImpl(); // Derived classes implement this
Это довольно много кода, который повторяется с небольшими отличиями (в сигнатуре) для каждого метода. Мой вопрос заключается в том, является ли это правильным подходом к этому, или .NET / C # предлагает какие-либо конструкции, которые сделали бы это проще / менее многословным?