AsyncResultWrapper.cs 971 B

1234567891011121314151617181920212223242526272829303132333435
  1. namespace Microsoft.Xna.Framework.Net
  2. {
  3. /// <summary>
  4. /// Wrapper for async operations to provide XNA-compatible IAsyncResult interface.
  5. /// </summary>
  6. internal class AsyncResultWrapper<T> : IAsyncResult
  7. {
  8. private readonly Task<T> task;
  9. private readonly object asyncState;
  10. public AsyncResultWrapper(Task<T> task, AsyncCallback callback, object asyncState)
  11. {
  12. this.task = task;
  13. this.asyncState = asyncState;
  14. if (callback != null)
  15. {
  16. task.ContinueWith(t => callback(this));
  17. }
  18. }
  19. public object AsyncState => asyncState;
  20. public System.Threading.WaitHandle AsyncWaitHandle => ((IAsyncResult)task).AsyncWaitHandle;
  21. public bool CompletedSynchronously => task.IsCompletedSuccessfully;
  22. public bool IsCompleted => task.IsCompleted;
  23. public T GetResult()
  24. {
  25. return task.Result;
  26. }
  27. }
  28. }