| 
144
 | 
     1 using System;
 | 
| 
 | 
     2 using System.Threading;
 | 
| 
 | 
     3 
 | 
| 
 | 
     4 namespace Implab {
 | 
| 
 | 
     5     public class FuncTask<T> : FuncTaskBase<T>, IDeferred {
 | 
| 
 | 
     6         readonly Func<T> m_task;
 | 
| 
 | 
     7 
 | 
| 
149
 | 
     8         public FuncTask(Func<T> task, Func<Exception, T> error, Func<Exception, T> cancel, bool autoCancellable) : base(error, cancel, autoCancellable) {
 | 
| 
144
 | 
     9             m_task = task;
 | 
| 
 | 
    10         }
 | 
| 
 | 
    11 
 | 
| 
 | 
    12         public void Resolve() {
 | 
| 
 | 
    13             if (m_task != null && LockCancelation()) {
 | 
| 
 | 
    14                 try {
 | 
| 
 | 
    15                     SetResult(m_task());
 | 
| 
 | 
    16                 } catch(Exception err) {
 | 
| 
 | 
    17                     HandleErrorInternal(err);
 | 
| 
 | 
    18                 }
 | 
| 
 | 
    19             }
 | 
| 
 | 
    20         }
 | 
| 
 | 
    21     }
 | 
| 
 | 
    22 }
 | 
| 
 | 
    23 
 |