/// <summary> /// Implements <c>ConfigureAwait(bool)</c> for <see cref="Task.Yield"/>. The resulting behavior in asynchronous code /// is the same as one would expect for <see cref="Task.ConfigureAwait(bool)"/>. /// </summary> /// <param name="awaitable">The awaitable provided by <see cref="Task.Yield"/>.</param> /// <param name="continueOnCapturedContext"><inheritdoc cref="Task.ConfigureAwait(bool)"/></param> /// <returns>An object used to await this yield.</returns> public static ConfiguredYieldAwaitable ConfigureAwait( this YieldAwaitable awaitable, bool continueOnCapturedContext ) { return(new ConfiguredYieldAwaitable(awaitable, continueOnCapturedContext)); }
public MyAwaiter(YieldAwaitable awaitable) { var awaiter = awaitable.GetAwaiter(); _onCompleted = awaiter.OnCompleted; _unsafeOnCompleted = awaiter.UnsafeOnCompleted; _getResult = awaiter.GetResult; _isCompleted = () => awaiter.IsCompleted; }
public static YieldAwaitableThreadPool ConfigureAwait(this YieldAwaitable _, bool LockContext) { return(new YieldAwaitableThreadPool()); }
public ConfiguredYieldAwaitable(YieldAwaitable awaitable, bool continueOnCapturedContext) { _awaitable = awaitable; _continueOnCapturedContext = continueOnCapturedContext; }
/// <summary>Продолжить в пуле потоков</summary> /// <param name="LockContext">Если истина, то продолжение будет выполнено в том же потоке, если ложь - то в пуле потоков</param> public static YieldAwaitableThreadPool ConfigureAwait(this YieldAwaitable _, bool LockContext) => new(LockContext);
/// <summary> /// Converts a <see cref="YieldAwaitable"/> to a <see cref="ConfiguredTaskYieldAwaitable"/>. /// </summary> /// <param name="yieldAwaitable">The result of <see cref="Task.Yield()"/>.</param> /// <param name="continueOnCapturedContext">A value indicating whether the continuation should run on the captured <see cref="SynchronizationContext"/>, if any.</param> /// <returns>An awaitable.</returns> public static ConfiguredTaskYieldAwaitable ConfigureAwait(this YieldAwaitable yieldAwaitable, bool continueOnCapturedContext) => new ConfiguredTaskYieldAwaitable(continueOnCapturedContext);