191 lines
5.6 KiB
C#
191 lines
5.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace Amib.Threading.Internal
|
|
{
|
|
public partial class WorkItem
|
|
{
|
|
#region WorkItemResult class
|
|
|
|
private class WorkItemResult : IWorkItemResult, IInternalWorkItemResult, IInternalWaitableResult
|
|
{
|
|
/// <summary>
|
|
/// A back reference to the work item
|
|
/// </summary>
|
|
private readonly WorkItem _workItem;
|
|
|
|
public WorkItemResult(WorkItem workItem)
|
|
{
|
|
_workItem = workItem;
|
|
}
|
|
|
|
internal WorkItem GetWorkItem()
|
|
{
|
|
return _workItem;
|
|
}
|
|
|
|
#region IWorkItemResult Members
|
|
|
|
public bool IsCompleted
|
|
{
|
|
get
|
|
{
|
|
return _workItem.IsCompleted;
|
|
}
|
|
}
|
|
|
|
public bool IsCanceled
|
|
{
|
|
get
|
|
{
|
|
return _workItem.IsCanceled;
|
|
}
|
|
}
|
|
|
|
public object GetResult()
|
|
{
|
|
return _workItem.GetResult(Timeout.Infinite, true, null);
|
|
}
|
|
|
|
public object GetResult(int millisecondsTimeout, bool exitContext)
|
|
{
|
|
return _workItem.GetResult(millisecondsTimeout, exitContext, null);
|
|
}
|
|
|
|
public object GetResult(TimeSpan timeout, bool exitContext)
|
|
{
|
|
return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null);
|
|
}
|
|
|
|
public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle)
|
|
{
|
|
return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle);
|
|
}
|
|
|
|
public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle)
|
|
{
|
|
return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle);
|
|
}
|
|
|
|
public object GetResult(out Exception e)
|
|
{
|
|
return _workItem.GetResult(Timeout.Infinite, true, null, out e);
|
|
}
|
|
|
|
public object GetResult(int millisecondsTimeout, bool exitContext, out Exception e)
|
|
{
|
|
return _workItem.GetResult(millisecondsTimeout, exitContext, null, out e);
|
|
}
|
|
|
|
public object GetResult(TimeSpan timeout, bool exitContext, out Exception e)
|
|
{
|
|
return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, null, out e);
|
|
}
|
|
|
|
public object GetResult(int millisecondsTimeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
|
|
{
|
|
return _workItem.GetResult(millisecondsTimeout, exitContext, cancelWaitHandle, out e);
|
|
}
|
|
|
|
public object GetResult(TimeSpan timeout, bool exitContext, WaitHandle cancelWaitHandle, out Exception e)
|
|
{
|
|
return _workItem.GetResult((int)timeout.TotalMilliseconds, exitContext, cancelWaitHandle, out e);
|
|
}
|
|
|
|
public bool Cancel()
|
|
{
|
|
return Cancel(false);
|
|
}
|
|
|
|
public bool Cancel(bool abortExecution)
|
|
{
|
|
return _workItem.Cancel(abortExecution);
|
|
}
|
|
|
|
public object State
|
|
{
|
|
get
|
|
{
|
|
return _workItem._state;
|
|
}
|
|
}
|
|
|
|
public WorkItemPriority WorkItemPriority
|
|
{
|
|
get
|
|
{
|
|
return _workItem._workItemInfo.WorkItemPriority;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Return the result, same as GetResult()
|
|
/// </summary>
|
|
public object Result
|
|
{
|
|
get { return GetResult(); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns the exception if occured otherwise returns null.
|
|
/// This value is valid only after the work item completed,
|
|
/// before that it is always null.
|
|
/// </summary>
|
|
public object Exception
|
|
{
|
|
get { return _workItem._exception; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IInternalWorkItemResult Members
|
|
|
|
public event WorkItemStateCallback OnWorkItemStarted
|
|
{
|
|
add
|
|
{
|
|
_workItem.OnWorkItemStarted += value;
|
|
}
|
|
remove
|
|
{
|
|
_workItem.OnWorkItemStarted -= value;
|
|
}
|
|
}
|
|
|
|
|
|
public event WorkItemStateCallback OnWorkItemCompleted
|
|
{
|
|
add
|
|
{
|
|
_workItem.OnWorkItemCompleted += value;
|
|
}
|
|
remove
|
|
{
|
|
_workItem.OnWorkItemCompleted -= value;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IInternalWorkItemResult Members
|
|
|
|
public IWorkItemResult GetWorkItemResult()
|
|
{
|
|
return this;
|
|
}
|
|
|
|
public IWorkItemResult<TResult> GetWorkItemResultT<TResult>()
|
|
{
|
|
return new WorkItemResultTWrapper<TResult>(this);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|