BeginInvoke
방법은 itslef 민간 방법 InvokeAsyncImpl
(InvokeAsync
에 의해 사용되는 방법을 호출하는 개인 LegacyBeginInvokeImpl
메소드를 호출로 차이가 없습니다). 기본적으로 똑같습니다. 그것은 단순한 리팩토링 인 것처럼 보이지만, BeginInvoke
메소드는 쓸데없는 것으로 표시되지 않았다는 것이 이상합니다.
BeginInvoke :
public DispatcherOperation BeginInvoke(DispatcherPriority priority, Delegate method)
{
return this.LegacyBeginInvokeImpl(priority, method, null, 0);
}
private DispatcherOperation LegacyBeginInvokeImpl(DispatcherPriority priority, Delegate method, object args, int numArgs)
{
Dispatcher.ValidatePriority(priority, "priority");
if (method == null)
{
throw new ArgumentNullException("method");
}
DispatcherOperation dispatcherOperation = new DispatcherOperation(this, method, priority, args, numArgs);
this.InvokeAsyncImpl(dispatcherOperation, CancellationToken.None);
return dispatcherOperation;
}
InvokeAsync :
public DispatcherOperation InvokeAsync(Action callback, DispatcherPriority priority)
{
return this.InvokeAsync(callback, priority, CancellationToken.None);
}
public DispatcherOperation InvokeAsync(Action callback, DispatcherPriority priority, CancellationToken cancellationToken)
{
if (callback == null)
{
throw new ArgumentNullException("callback");
}
Dispatcher.ValidatePriority(priority, "priority");
DispatcherOperation dispatcherOperation = new DispatcherOperation(this, priority, callback);
this.InvokeAsyncImpl(dispatcherOperation, cancellationToken);
return dispatcherOperation;
}
현재 처리되지 않은 예외가 BeginInvoke를 사용하여 예상대로 작동하고 있습니다 (DispatcherUnh andledException) 및 AppDomain.CurrentDomain.UnhandledException), InvokeAsync에서 처리되지 않은 예외가 자동으로 삼키는 중입니다. 예외를 트래핑하는 무언가로 InvokeAsync에서 작업을 계속하면 유효한 해결 방법 인 것 같습니다. – Lamarth
'BeginInvoke'는 .NET에서''BeginSomething ''을 사용하는 [ "Asynchronous Programming Model"] (https://msdn.microsoft.com/en-us/library/ms228963(v=vs.110) .aspx) '및'EndSomething' 메소드를 호출합니다. 아마도 이것이 비추천되거나 쓸모없는 것으로 지정되지 않은 이유 일 것입니다. 'Begin' /'End' 컨벤션은'IAsyncResult'을 사용하기위한 것이고'BeginInvoke'는'EndInvoke'도 아니고, 그래서 EndInvoke도 없습니다. 그래서 처음에는 불필요한 일이었습니다. – sidbushes