TaskExtensions.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. // <copyright>
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace System.ServiceModel.Dispatcher
  5. {
  6. using System;
  7. using System.Diagnostics;
  8. using System.Linq;
  9. using System.Reflection;
  10. using System.Runtime;
  11. using System.Runtime.Diagnostics;
  12. using System.Threading.Tasks;
  13. /// <summary>
  14. /// Extension methods for Task and its generic counterpart(Task of T)
  15. /// </summary>
  16. internal static class TaskExtensions
  17. {
  18. private const string TaskAsAsyncResultMethodName = "AsAsyncResult";
  19. private static MethodInfo taskAsAsyncResultMethodInfo;
  20. public static MethodInfo TaskAsAsyncResultMethodInfo
  21. {
  22. get
  23. {
  24. if (taskAsAsyncResultMethodInfo == null)
  25. {
  26. taskAsAsyncResultMethodInfo = typeof(System.Runtime.TaskExtensions).GetMethods().Where(m =>
  27. m.IsGenericMethod && m.Name == TaskAsAsyncResultMethodName).First();
  28. Fx.Assert(taskAsAsyncResultMethodInfo != null, "taskAsAsyncResultMethodInfo should not be null.");
  29. }
  30. return taskAsAsyncResultMethodInfo;
  31. }
  32. }
  33. public static MethodInfo MakeGenericMethod(Type genericArgument)
  34. {
  35. return TaskExtensions.TaskAsAsyncResultMethodInfo.MakeGenericMethod(genericArgument);
  36. }
  37. }
  38. }