/// <summary> /// Implementation of asynchronous function called by sub-classes with appropriate function parameters /// to perform the asynchronous operation, and turn results into TEventArgs. /// This override just defaults the userState object to null. /// </summary> /// <typeparam name="TData">Input data type of operation.</typeparam> /// <typeparam name="TResult">Result data type of operation.</typeparam> /// <param name="data">Operation input data.</param> /// <param name="operation">Operation being called in another thread by AsyncOperation.</param> /// <param name="funcProxy">Function being called.</param> /// <param name="funcEvent">Function to create TEventArgs from results.</param> public void AsyncFuncImpl <TData, TResult>(TData data , AsyncOperationFuncDefaultDelegate <TData, TResult> operation , Func <TData, TResult> funcProxy , MakeFuncEventDelegate <TData, TResult> funcEvent) { this.AsyncFuncImpl(null, data, operation, funcProxy, funcEvent); }
/// <summary> /// Implementation of asynchronous function called by sub-classes with appropriate function parameters /// to perform the asynchronous operation, and turn results into TEventArgs. /// This overload requires no operation delegate specified for AsyncOperation. /// </summary> /// <typeparam name="TData">Input data type of operation.</typeparam> /// <typeparam name="TResult">Result data type of operation.</typeparam> /// <param name="data">Operation input data.</param> /// <param name="funcProxy">Function being called.</param> /// <param name="funcEvent">Function to create TEventArgs from results.</param> public void AsyncFuncImpl <TData, TResult>(object userState , TData data , Func <TData, TResult> funcProxy , MakeFuncEventDelegate <TData, TResult> funcEvent ) { this.AsyncFuncImpl(userState, data, AsyncOperationFuncDefaultImpl, funcProxy, funcEvent); }
// Implementation defined in sub-class. /// <summary> /// Implementation of asynchronous function called by sub-classes with appropriate function parameters /// to perform the asynchronous operation, and turn results into TEventArgs. /// </summary> /// <typeparam name="TData">Input data type of operation.</typeparam> /// <typeparam name="TResult">Result data type of operation.</typeparam> /// <param name="userState">User state object provided by calling code.</param> /// <param name="data">Operation input data.</param> /// <param name="operation">Operation being called in another thread by AsyncOperation.</param> /// <param name="funcProxy">Function being called.</param> /// <param name="funcEvent">Function to create TEventArgs from results.</param> public void AsyncFuncImpl <TData, TResult>(object userState , TData data , AsyncOperationFuncDefaultDelegate <TData, TResult> operation , Func <TData, TResult> funcProxy , MakeFuncEventDelegate <TData, TResult> funcEvent ) { AsyncOperation asyncOp = this.CreateOperation(userState); DataAndFunc <TData, TResult> datafunction = new DataAndFunc <TData, TResult> { operation = operation, data = data, func = funcProxy, funcEvent = funcEvent }; AsyncOperationFuncDelegate <TData, TResult> asyncDelegate = this.AsyncOperationFunc <TData, TResult>; asyncDelegate.BeginInvoke(datafunction, asyncOp, null, null); }
public static TEventArgs AsyncOperationFuncDefaultImpl <TData, TResult>(TData data, Func <TData, TResult> func, bool cancelled, object userState, MakeFuncEventDelegate <TData, TResult> funcEvent) { Exception e = null; TResult result = default(TResult); try { result = func(data); } catch (Exception ex) { e = ex; } object userStateOriginal = userState; if (userState is UserStateHolder) { // Get the original user-provided object out of the holder. userState = ((UserStateHolder)userState).UserState; } return(funcEvent(data, result, e, cancelled, userState)); }