public static TaskAwaiter GetAwaiter(this GoogleDriveRequestYeildInstruction yeildInstruction) { var taskCompletionSource = new TaskCompletionSource<object>(); if (yeildInstruction.IsDone) { taskCompletionSource.SetResult(null); } else { yeildInstruction.OnDoneNonGeneric += () => taskCompletionSource.SetResult(null); } return (taskCompletionSource.Task as Task).GetAwaiter(); }
/// <summary> /// Begin communicating with the Google Drive API to execute the request. /// </summary> /// <returns> /// A yeild instruction indicating the progress/completion state of the request. /// Yield this object to wait until the request <see cref="IsDone"/> or use <see cref="OnDone"/> event. /// </returns> public GoogleDriveRequestYeildInstruction <TResponse> Send() { if (!IsRunning) { yeildInstruction = new GoogleDriveRequestYeildInstruction <TResponse>(this); SendWebRequest(); } return(yeildInstruction); }
/// <summary> /// Allows awaiting <see cref="GoogleDriveRequest"/> objects in async methods. /// </summary> public static TaskAwaiter<TResponse> GetAwaiter<TResponse> (this GoogleDriveRequestYeildInstruction<TResponse> yeildInstruction) { var taskCompletionSource = new TaskCompletionSource<TResponse>(); if (yeildInstruction.GoogleDriveRequest.IsDone) { taskCompletionSource.SetResult(yeildInstruction.GoogleDriveRequest.ResponseData); } else { yeildInstruction.OnDone += responseData => taskCompletionSource.SetResult(responseData); } return taskCompletionSource.Task.GetAwaiter(); }