Reemind

StopWatchProxy

Mar 8th, 2021 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.68 KB | None | 0 0
  1. public static class StopWatchProxy
  2.     {
  3.         public static StopWatchProxyResultWithValue<T> Handle<T>(Func<T> lambda)
  4.         {
  5.             var stopWatch = new Stopwatch();
  6.             stopWatch.Start();
  7.             var result = lambda();
  8.             stopWatch.Stop();
  9.             return StopWatchProxyResultWithValue<T>.FromStopWatch(result, stopWatch);
  10.         }
  11.  
  12.         public static StopWatchProxyResult Handle(Action lambda)
  13.         {
  14.             var stopWatch = new Stopwatch();
  15.             stopWatch.Start();
  16.             lambda();
  17.             stopWatch.Stop();
  18.             return StopWatchProxyResult.FromStopWatch(stopWatch);
  19.         }
  20.     }
  21.  
  22.     public class StopWatchProxyResult
  23.     {
  24.         public TimeSpan Elapsed { get; set; }
  25.         public long ElapsedTicks { get; set; }
  26.         public long ElapsedMilliseconds { get; set; }
  27.  
  28.         public static StopWatchProxyResult FromStopWatch(Stopwatch stopWatch)
  29.             => new StopWatchProxyResult
  30.             {
  31.                 Elapsed = stopWatch.Elapsed,
  32.                 ElapsedMilliseconds = stopWatch.ElapsedMilliseconds,
  33.                 ElapsedTicks = stopWatch.ElapsedTicks
  34.             };
  35.     }
  36.  
  37.     public class StopWatchProxyResultWithValue<T> : StopWatchProxyResult
  38.     {
  39.         public T Result { get; set; }
  40.  
  41.         public static StopWatchProxyResultWithValue<T> FromStopWatch(T result, Stopwatch stopWatch)
  42.             => new StopWatchProxyResultWithValue<T>
  43.             {
  44.                 Result = result,
  45.                 Elapsed = stopWatch.Elapsed,
  46.                 ElapsedMilliseconds = stopWatch.ElapsedMilliseconds,
  47.                 ElapsedTicks = stopWatch.ElapsedTicks
  48.             };
  49.     }
Add Comment
Please, Sign In to add comment