Command 패턴을 사용하여 비동기 작업을 처리하는 가장 좋은 방법에 대한 의견을 듣고 싶습니다.C#의 명령 패턴 및 비동기 작업 처리
public class MyCommand
{
// Sets up receiver and does whatever stuff
public void Execute()
{
_myReceiver.DoSomething();
}
}
이 문제는 다음과 같습니다 : MyCommand이 MyReceiver.DoSomething은() 코드의 비동기 부분이 있는지 여부를 알 수 없습니다 우리는 다음과 같은 예를 말해봐. 실행 후 MyCommand를 실행 취소 스택에 넣으려고하면 해당 수신자 작업이 완전히 실행되었음을 보장 할 수 없어 MyCommand가 실행 취소가 가능한 상태에 도달했는지 여부를 알 수 없습니다.
나는 개인적으로 다음과 같은 솔루션에 대한 생각 :
- 이
- 가 MyReceiver에서 이벤트를 포함
- 이 명령에서 "BeginExecute"와 "EndExecute"를 포함 명령의 국가 통제의 일종을 구현하고 명령 구독하기 012 : 그들에게 일을 마무리하려면, MyCommand로 전환 할
(즉, 나에게 냄새 나는 것 같다)
이제 명령 수신자가 어떤 작업을 수행했는지 확인하고 실행 취소 스택에 푸시 할 준비가되었음을 알 수 있습니다. 그러나 이벤트 스팸의 경우 비동기 작업이 포함 된 모든 단일 수신기 클래스가 실제로 버그가 발생합니다.
인터넷에서이 주제에 대해 많이 알지 못했지만 다른 접근법을 듣고 싶습니다.
OBS : 모든 비동기 관련 코드를 관리하는 명령을 옵션이 아닙니다. :).
어떻게하면 _myReceiver.DoSomething(); 일부 비동기 속성이 있습니다. 완료되었거나 비동기 동작을 제어 할 수있는 무언가를 반환합니다. 어쨌든 _myReceiver.DoSomething(); 당신의 명령이 아닙니다. – Euphoric
실행 취소 부분이 어떻게 보이는지 - 비동기 실행을 명령하거나 ... ...? –
@Euphoric DoSomething 메서드는 .BeginInvoke something ... –