public static void ValidateMode(SynchronizationContextMode currentMode, SynchronizationContextMode requiredMode, string specificErrorMessage) { Debug.Assert(specificErrorMessage != null); if (currentMode != requiredMode) { string errorMessage = FormatErrorMessage(specificErrorMessage, requiredMode); throw new InvalidOperationException(errorMessage); } }
private static string FormatErrorMessage(string specificErrorMessage, SynchronizationContextMode requiredMode) { // The output of this function will be a message like this: // "What you're trying to do is unsupported. Follow these steps to resolve it. For more // info, see this URL." string resolutionMessage; if (HttpRuntime.TargetFramework < VersionUtil.Framework45 && requiredMode == SynchronizationContextMode.Normal) { // upgrade to 4.5 mode resolutionMessage = SR.SynchronizationContextUtil_UpgradeToTargetFramework45Instructions; } else if (HttpRuntime.TargetFramework >= VersionUtil.Framework45 && requiredMode == SynchronizationContextMode.Legacy) { // already in 4.5 mode, add the back-compat switch resolutionMessage = SR.SynchronizationContextUtil_AddDowngradeAppSettingsSwitch; } else { // remove the <appSettings> switch resolutionMessage = SR.SynchronizationContextUtil_RemoveAppSettingsSwitch; } return(SR.GetString(specificErrorMessage) + " " + SR.GetString(resolutionMessage) + "\r\n" + SR.GetString(SR.SynchronizationContextUtil_ForMoreInformation)); }
// TAP internal PageAsyncTask(Func<CancellationToken, Task> handler, SynchronizationContextMode currentMode) { if (handler == null) { throw new ArgumentNullException("handler"); } // The legacy PageAsyncTaskManager doesn't support TAP methods SynchronizationContextUtil.ValidateMode(currentMode, requiredMode: SynchronizationContextMode.Normal, specificErrorMessage: SR.SynchronizationContextUtil_TaskReturningPageAsyncMethodsNotCompatible); TaskHandler = handler; }
// TAP internal PageAsyncTask(Func <CancellationToken, Task> handler, SynchronizationContextMode currentMode) { if (handler == null) { throw new ArgumentNullException("handler"); } // The legacy PageAsyncTaskManager doesn't support TAP methods SynchronizationContextUtil.ValidateMode(currentMode, requiredMode: SynchronizationContextMode.Normal, specificErrorMessage: SR.SynchronizationContextUtil_TaskReturningPageAsyncMethodsNotCompatible); TaskHandler = handler; }
// APM internal PageAsyncTask(BeginEventHandler beginHandler, EndEventHandler endHandler, EndEventHandler timeoutHandler, Object state, bool executeInParallel, SynchronizationContextMode currentMode) { if (beginHandler == null) { throw new ArgumentNullException("beginHandler"); } if (endHandler == null) { throw new ArgumentNullException("endHandler"); } // Only the legacy PageAsyncTaskManager supports timing out APM methods or executing them in parallel if (timeoutHandler != null || executeInParallel) { SynchronizationContextUtil.ValidateMode(currentMode, requiredMode: SynchronizationContextMode.Legacy, specificErrorMessage: SR.SynchronizationContextUtil_PageAsyncTaskTimeoutHandlerParallelNotCompatible); } BeginHandler = beginHandler; EndHandler = endHandler; TimeoutHandler = timeoutHandler; State = state; ExecuteInParallel = executeInParallel; }
private static string FormatErrorMessage(string specificErrorMessage, SynchronizationContextMode requiredMode) { // The output of this function will be a message like this: // "What you're trying to do is unsupported. Follow these steps to resolve it. For more // info, see this URL." string resolutionMessage; if (HttpRuntime.TargetFramework < VersionUtil.Framework45 && requiredMode == SynchronizationContextMode.Normal) { // upgrade to 4.5 mode resolutionMessage = SR.SynchronizationContextUtil_UpgradeToTargetFramework45Instructions; } else if (HttpRuntime.TargetFramework >= VersionUtil.Framework45 && requiredMode == SynchronizationContextMode.Legacy) { // already in 4.5 mode, add the back-compat switch resolutionMessage = SR.SynchronizationContextUtil_AddDowngradeAppSettingsSwitch; } else { // remove the <appSettings> switch resolutionMessage = SR.SynchronizationContextUtil_RemoveAppSettingsSwitch; } return SR.GetString(specificErrorMessage) + " " + SR.GetString(resolutionMessage) + "\r\n" + SR.GetString(SR.SynchronizationContextUtil_ForMoreInformation); }