diff --git a/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs b/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
deleted file mode 100644
index 64d738e815..0000000000
--- a/ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
+++ /dev/null
@@ -1,446 +0,0 @@
-using System;
-using System.Diagnostics;
-using System.Threading;
-
-namespace Amib.Threading
-{
- public interface ISTPPerformanceCountersReader
- {
- long InUseThreads { get; }
- long ActiveThreads { get; }
- long WorkItemsQueued { get; }
- long WorkItemsProcessed { get; }
- }
-}
-
-namespace Amib.Threading.Internal
-{
- internal interface ISTPInstancePerformanceCounters : IDisposable
- {
- void Close();
- void SampleThreads(long activeThreads, long inUseThreads);
- void SampleWorkItems(long workItemsQueued, long workItemsProcessed);
- void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime);
- void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime);
- }
-
- internal enum STPPerformanceCounterType
- {
- // Fields
- ActiveThreads = 0,
- InUseThreads = 1,
- OverheadThreads = 2,
- OverheadThreadsPercent = 3,
- OverheadThreadsPercentBase = 4,
-
- WorkItems = 5,
- WorkItemsInQueue = 6,
- WorkItemsProcessed = 7,
-
- WorkItemsQueuedPerSecond = 8,
- WorkItemsProcessedPerSecond = 9,
-
- AvgWorkItemWaitTime = 10,
- AvgWorkItemWaitTimeBase = 11,
-
- AvgWorkItemProcessTime = 12,
- AvgWorkItemProcessTimeBase = 13,
-
- WorkItemsGroups = 14,
-
- LastCounter = 14,
- }
-
-
- ///
- /// Summary description for STPPerformanceCounter.
- ///
- internal class STPPerformanceCounter
- {
- // Fields
- private readonly PerformanceCounterType _pcType;
- protected string _counterHelp;
- protected string _counterName;
-
- // Methods
- public STPPerformanceCounter(
- string counterName,
- string counterHelp,
- PerformanceCounterType pcType)
- {
- _counterName = counterName;
- _counterHelp = counterHelp;
- _pcType = pcType;
- }
-
- public void AddCounterToCollection(CounterCreationDataCollection counterData)
- {
- CounterCreationData counterCreationData = new CounterCreationData(
- _counterName,
- _counterHelp,
- _pcType);
-
- counterData.Add(counterCreationData);
- }
-
- // Properties
- public string Name
- {
- get
- {
- return _counterName;
- }
- }
- }
-
- internal class STPPerformanceCounters
- {
- // Fields
- internal STPPerformanceCounter[] _stpPerformanceCounters;
- private static readonly STPPerformanceCounters _instance;
- internal const string _stpCategoryHelp = "SmartThreadPool performance counters";
- internal const string _stpCategoryName = "SmartThreadPool";
-
- // Methods
- static STPPerformanceCounters()
- {
- _instance = new STPPerformanceCounters();
- }
-
- private STPPerformanceCounters()
- {
- STPPerformanceCounter[] stpPerformanceCounters = new STPPerformanceCounter[]
- {
- new STPPerformanceCounter("Active threads", "The current number of available in the thread pool.", PerformanceCounterType.NumberOfItems32),
- new STPPerformanceCounter("In use threads", "The current number of threads that execute a work item.", PerformanceCounterType.NumberOfItems32),
- new STPPerformanceCounter("Overhead threads", "The current number of threads that are active, but are not in use.", PerformanceCounterType.NumberOfItems32),
- new STPPerformanceCounter("% overhead threads", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawFraction),
- new STPPerformanceCounter("% overhead threads base", "The current number of threads that are active, but are not in use in percents.", PerformanceCounterType.RawBase),
-
- new STPPerformanceCounter("Work Items", "The number of work items in the Smart Thread Pool. Both queued and processed.", PerformanceCounterType.NumberOfItems32),
- new STPPerformanceCounter("Work Items in queue", "The current number of work items in the queue", PerformanceCounterType.NumberOfItems32),
- new STPPerformanceCounter("Work Items processed", "The number of work items already processed", PerformanceCounterType.NumberOfItems32),
-
- new STPPerformanceCounter("Work Items queued/sec", "The number of work items queued per second", PerformanceCounterType.RateOfCountsPerSecond32),
- new STPPerformanceCounter("Work Items processed/sec", "The number of work items processed per second", PerformanceCounterType.RateOfCountsPerSecond32),
-
- new STPPerformanceCounter("Avg. Work Item wait time/sec", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageCount64),
- new STPPerformanceCounter("Avg. Work Item wait time base", "The average time a work item supends in the queue waiting for its turn to execute.", PerformanceCounterType.AverageBase),
-
- new STPPerformanceCounter("Avg. Work Item process time/sec", "The average time it takes to process a work item.", PerformanceCounterType.AverageCount64),
- new STPPerformanceCounter("Avg. Work Item process time base", "The average time it takes to process a work item.", PerformanceCounterType.AverageBase),
-
- new STPPerformanceCounter("Work Items Groups", "The current number of work item groups associated with the Smart Thread Pool.", PerformanceCounterType.NumberOfItems32),
- };
-
- _stpPerformanceCounters = stpPerformanceCounters;
- SetupCategory();
- }
-
- private void SetupCategory()
- {
- if (!PerformanceCounterCategory.Exists(_stpCategoryName))
- {
- CounterCreationDataCollection counters = new CounterCreationDataCollection();
-
- for (int i = 0; i < _stpPerformanceCounters.Length; i++)
- {
- _stpPerformanceCounters[i].AddCounterToCollection(counters);
- }
-
- PerformanceCounterCategory.Create(
- _stpCategoryName,
- _stpCategoryHelp,
- PerformanceCounterCategoryType.MultiInstance,
- counters);
-
- }
- }
-
- // Properties
- public static STPPerformanceCounters Instance
- {
- get
- {
- return _instance;
- }
- }
- }
-
- internal class STPInstancePerformanceCounter : IDisposable
- {
- // Fields
- private bool _isDisposed;
- private PerformanceCounter _pcs;
-
- // Methods
- protected STPInstancePerformanceCounter()
- {
- _isDisposed = false;
- }
-
- public STPInstancePerformanceCounter(
- string instance,
- STPPerformanceCounterType spcType) : this()
- {
- STPPerformanceCounters counters = STPPerformanceCounters.Instance;
- _pcs = new PerformanceCounter(
- STPPerformanceCounters._stpCategoryName,
- counters._stpPerformanceCounters[(int) spcType].Name,
- instance,
- false);
- _pcs.RawValue = _pcs.RawValue;
- }
-
-
- public void Close()
- {
- if (_pcs != null)
- {
- _pcs.RemoveInstance();
- _pcs.Close();
- _pcs = null;
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- }
-
- public virtual void Dispose(bool disposing)
- {
- if (!_isDisposed)
- {
- if (disposing)
- {
- Close();
- }
- }
- _isDisposed = true;
- }
-
- public virtual void Increment()
- {
- _pcs.Increment();
- }
-
- public virtual void IncrementBy(long val)
- {
- _pcs.IncrementBy(val);
- }
-
- public virtual void Set(long val)
- {
- _pcs.RawValue = val;
- }
- }
-
- internal class STPInstanceNullPerformanceCounter : STPInstancePerformanceCounter
- {
- // Methods
- public override void Increment() {}
- public override void IncrementBy(long value) {}
- public override void Set(long val) {}
- }
-
-
-
- internal class STPInstancePerformanceCounters : ISTPInstancePerformanceCounters
- {
- private bool _isDisposed;
- // Fields
- private STPInstancePerformanceCounter[] _pcs;
- private static readonly STPInstancePerformanceCounter _stpInstanceNullPerformanceCounter;
-
- // Methods
- static STPInstancePerformanceCounters()
- {
- _stpInstanceNullPerformanceCounter = new STPInstanceNullPerformanceCounter();
- }
-
- public STPInstancePerformanceCounters(string instance)
- {
- _isDisposed = false;
- _pcs = new STPInstancePerformanceCounter[(int)STPPerformanceCounterType.LastCounter];
-
- // Call the STPPerformanceCounters.Instance so the static constructor will
- // intialize the STPPerformanceCounters singleton.
- STPPerformanceCounters.Instance.GetHashCode();
-
- for (int i = 0; i < _pcs.Length; i++)
- {
- if (instance != null)
- {
- _pcs[i] = new STPInstancePerformanceCounter(
- instance,
- (STPPerformanceCounterType) i);
- }
- else
- {
- _pcs[i] = _stpInstanceNullPerformanceCounter;
- }
- }
- }
-
-
- public void Close()
- {
- if (null != _pcs)
- {
- for (int i = 0; i < _pcs.Length; i++)
- {
- if (null != _pcs[i])
- {
- _pcs[i].Dispose();
- }
- }
- _pcs = null;
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- }
-
- public virtual void Dispose(bool disposing)
- {
- if (!_isDisposed)
- {
- if (disposing)
- {
- Close();
- }
- }
- _isDisposed = true;
- }
-
- private STPInstancePerformanceCounter GetCounter(STPPerformanceCounterType spcType)
- {
- return _pcs[(int) spcType];
- }
-
- public void SampleThreads(long activeThreads, long inUseThreads)
- {
- GetCounter(STPPerformanceCounterType.ActiveThreads).Set(activeThreads);
- GetCounter(STPPerformanceCounterType.InUseThreads).Set(inUseThreads);
- GetCounter(STPPerformanceCounterType.OverheadThreads).Set(activeThreads-inUseThreads);
-
- GetCounter(STPPerformanceCounterType.OverheadThreadsPercentBase).Set(activeThreads-inUseThreads);
- GetCounter(STPPerformanceCounterType.OverheadThreadsPercent).Set(inUseThreads);
- }
-
- public void SampleWorkItems(long workItemsQueued, long workItemsProcessed)
- {
- GetCounter(STPPerformanceCounterType.WorkItems).Set(workItemsQueued+workItemsProcessed);
- GetCounter(STPPerformanceCounterType.WorkItemsInQueue).Set(workItemsQueued);
- GetCounter(STPPerformanceCounterType.WorkItemsProcessed).Set(workItemsProcessed);
-
- GetCounter(STPPerformanceCounterType.WorkItemsQueuedPerSecond).Set(workItemsQueued);
- GetCounter(STPPerformanceCounterType.WorkItemsProcessedPerSecond).Set(workItemsProcessed);
- }
-
- public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime)
- {
- GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTime).IncrementBy((long)workItemWaitTime.TotalMilliseconds);
- GetCounter(STPPerformanceCounterType.AvgWorkItemWaitTimeBase).Increment();
- }
-
- public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime)
- {
- GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTime).IncrementBy((long)workItemProcessTime.TotalMilliseconds);
- GetCounter(STPPerformanceCounterType.AvgWorkItemProcessTimeBase).Increment();
- }
- }
-
- internal class NullSTPInstancePerformanceCounters : ISTPInstancePerformanceCounters, ISTPPerformanceCountersReader
- {
- private static readonly NullSTPInstancePerformanceCounters _instance = new NullSTPInstancePerformanceCounters();
-
- public static NullSTPInstancePerformanceCounters Instance
- {
- get { return _instance; }
- }
-
- public void Close() {}
- public void Dispose() {}
-
- public void SampleThreads(long activeThreads, long inUseThreads) {}
- public void SampleWorkItems(long workItemsQueued, long workItemsProcessed) {}
- public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime) {}
- public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime) {}
- public long InUseThreads
- {
- get { return 0; }
- }
-
- public long ActiveThreads
- {
- get { return 0; }
- }
-
- public long WorkItemsQueued
- {
- get { return 0; }
- }
-
- public long WorkItemsProcessed
- {
- get { return 0; }
- }
- }
-
- internal class LocalSTPInstancePerformanceCounters : ISTPInstancePerformanceCounters, ISTPPerformanceCountersReader
- {
- public void Close() { }
- public void Dispose() { }
-
- private long _activeThreads;
- private long _inUseThreads;
- private long _workItemsQueued;
- private long _workItemsProcessed;
-
- public long InUseThreads
- {
- get { return _inUseThreads; }
- }
-
- public long ActiveThreads
- {
- get { return _activeThreads; }
- }
-
- public long WorkItemsQueued
- {
- get { return _workItemsQueued; }
- }
-
- public long WorkItemsProcessed
- {
- get { return _workItemsProcessed; }
- }
-
- public void SampleThreads(long activeThreads, long inUseThreads)
- {
- _activeThreads = activeThreads;
- _inUseThreads = inUseThreads;
- }
-
- public void SampleWorkItems(long workItemsQueued, long workItemsProcessed)
- {
- _workItemsQueued = workItemsQueued;
- _workItemsProcessed = workItemsProcessed;
- }
-
- public void SampleWorkItemsWaitTime(TimeSpan workItemWaitTime)
- {
- // Not supported
- }
-
- public void SampleWorkItemsProcessTime(TimeSpan workItemProcessTime)
- {
- // Not supported
- }
- }
-}
diff --git a/ThirdParty/SmartThreadPool/STPStartInfo.cs b/ThirdParty/SmartThreadPool/STPStartInfo.cs
index cb3573133c..bf116ce178 100644
--- a/ThirdParty/SmartThreadPool/STPStartInfo.cs
+++ b/ThirdParty/SmartThreadPool/STPStartInfo.cs
@@ -12,16 +12,13 @@ namespace Amib.Threading
private int _minWorkerThreads = SmartThreadPool.DefaultMinWorkerThreads;
private int _maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
private ThreadPriority _threadPriority = SmartThreadPool.DefaultThreadPriority;
- private string _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
private bool _areThreadsBackground = SmartThreadPool.DefaultAreThreadsBackground;
- private bool _enableLocalPerformanceCounters;
private string _threadPoolName = SmartThreadPool.DefaultThreadPoolName;
private int? _maxStackSize = SmartThreadPool.DefaultMaxStackSize;
private bool _supressflow = false;
public STPStartInfo()
{
- _performanceCounterInstanceName = SmartThreadPool.DefaultPerformanceCounterInstanceName;
_threadPriority = SmartThreadPool.DefaultThreadPriority;
_maxWorkerThreads = SmartThreadPool.DefaultMaxWorkerThreads;
_idleTimeout = SmartThreadPool.DefaultIdleTimeout;
@@ -35,8 +32,6 @@ namespace Amib.Threading
_minWorkerThreads = stpStartInfo.MinWorkerThreads;
_maxWorkerThreads = stpStartInfo.MaxWorkerThreads;
_threadPriority = stpStartInfo.ThreadPriority;
- _performanceCounterInstanceName = stpStartInfo.PerformanceCounterInstanceName;
- _enableLocalPerformanceCounters = stpStartInfo._enableLocalPerformanceCounters;
_threadPoolName = stpStartInfo._threadPoolName;
_areThreadsBackground = stpStartInfo.AreThreadsBackground;
_apartmentState = stpStartInfo._apartmentState;
@@ -110,36 +105,6 @@ namespace Amib.Threading
}
}
- ///
- /// Get/Set the performance counter instance name of this SmartThreadPool
- /// The default is null which indicate not to use performance counters at all.
- ///
- public virtual string PerformanceCounterInstanceName
- {
- get { return _performanceCounterInstanceName; }
- set
- {
- ThrowIfReadOnly();
- _performanceCounterInstanceName = value;
- }
- }
-
- ///
- /// Enable/Disable the local performance counter.
- /// This enables the user to get some performance information about the SmartThreadPool
- /// without using Windows performance counters. (Useful on WindowsCE, Silverlight, etc.)
- /// The default is false.
- ///
- public virtual bool EnableLocalPerformanceCounters
- {
- get { return _enableLocalPerformanceCounters; }
- set
- {
- ThrowIfReadOnly();
- _enableLocalPerformanceCounters = value;
- }
- }
-
///
/// Get/Set backgroundness of thread in thread pool.
///
diff --git a/ThirdParty/SmartThreadPool/SmartThreadPool.cs b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
index 836cdef571..3522658476 100644
--- a/ThirdParty/SmartThreadPool/SmartThreadPool.cs
+++ b/ThirdParty/SmartThreadPool/SmartThreadPool.cs
@@ -281,16 +281,6 @@ namespace Amib.Threading
///
private CanceledWorkItemsGroup _canceledSmartThreadPool = new CanceledWorkItemsGroup();
- ///
- /// Windows STP performance counters
- ///
- private ISTPInstancePerformanceCounters _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
-
- ///
- /// Local STP performance counters
- ///
- private ISTPInstancePerformanceCounters _localPCs = NullSTPInstancePerformanceCounters.Instance;
-
///
/// An event to call after a thread is created, but before
/// it's first use.
@@ -397,24 +387,6 @@ namespace Amib.Threading
_isSuspended = _stpStartInfo.StartSuspended;
- if (null != _stpStartInfo.PerformanceCounterInstanceName)
- {
- try
- {
- _windowsPCs = new STPInstancePerformanceCounters(_stpStartInfo.PerformanceCounterInstanceName);
- }
- catch (Exception e)
- {
- Debug.WriteLine("Unable to create Performance Counters: " + e);
- _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
- }
- }
-
- if (_stpStartInfo.EnableLocalPerformanceCounters)
- {
- _localPCs = new LocalSTPInstancePerformanceCounters();
- }
-
// If the STP is not started suspended then start the threads.
if (!_isSuspended)
{
@@ -511,9 +483,6 @@ namespace Amib.Threading
private void IncrementWorkItemsCount()
{
- _windowsPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
- _localPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
-
int count = Interlocked.Increment(ref _currentWorkItemsCount);
//Trace.WriteLine("WorkItemsCount = " + _currentWorkItemsCount.ToString());
if (count == 1)
@@ -534,14 +503,6 @@ namespace Amib.Threading
}
Interlocked.Increment(ref _workItemsProcessed);
-
- if (!_shutdown)
- {
- // The counter counts even if the work item was cancelled
- _windowsPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
- _localPCs.SampleWorkItems(_workItemsQueue.Count, _workItemsProcessed);
- }
-
}
private int baseWorkIDs = Environment.TickCount;
@@ -572,8 +533,6 @@ namespace Amib.Threading
if (_workerThreads.TryRemove(Thread.CurrentThread.ManagedThreadId, out ThreadEntry te))
{
te.Clean();
- _windowsPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
- _localPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
}
}
@@ -644,9 +603,6 @@ namespace Amib.Threading
_workerThreads[workerThread.ManagedThreadId] = new ThreadEntry(this, workerThread);
workerThread.Start();
-
- _windowsPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
- _localPCs.SampleThreads(_workerThreads.Count, _inUseWorkerThreads);
}
}
}
@@ -755,8 +711,6 @@ namespace Amib.Threading
// Execute the callback. Make sure to accurately
// record how many callbacks are currently executing.
int inUseWorkerThreads = Interlocked.Increment(ref _inUseWorkerThreads);
- _windowsPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
- _localPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
// Mark that the _inUseWorkerThreads incremented, so in the finally{}
// statement we will decrement it correctly.
@@ -785,8 +739,6 @@ namespace Amib.Threading
if (bInUseWorkerThreadsWasIncremented)
{
int inUseWorkerThreads = Interlocked.Decrement(ref _inUseWorkerThreads);
- _windowsPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
- _localPCs.SampleThreads(_workerThreads.Count, inUseWorkerThreads);
}
// Notify that the work item has been completed.
@@ -799,12 +751,14 @@ namespace Amib.Threading
}
}
}
+ /*
catch (ThreadAbortException tae)
{
- tae.GetHashCode();
+ //tae.GetHashCode();
// Handle the abort exception gracfully.
- Thread.ResetAbort();
+ //Thread.ResetAbort();
}
+ */
catch (Exception e)
{
Debug.Assert(null != e);
@@ -821,16 +775,12 @@ namespace Amib.Threading
private void ExecuteWorkItem(WorkItem workItem)
{
- _windowsPCs.SampleWorkItemsWaitTime(workItem.WaitingTime);
- _localPCs.SampleWorkItemsWaitTime(workItem.WaitingTime);
try
{
workItem.Execute();
}
finally
{
- _windowsPCs.SampleWorkItemsProcessTime(workItem.ProcessTime);
- _localPCs.SampleWorkItemsProcessTime(workItem.ProcessTime);
}
}
@@ -888,17 +838,6 @@ namespace Amib.Threading
{
ValidateNotDisposed();
- ISTPInstancePerformanceCounters pcs = _windowsPCs;
-
- if (NullSTPInstancePerformanceCounters.Instance != _windowsPCs)
- {
- // Set the _pcs to "null" to stop updating the performance
- // counters
- _windowsPCs = NullSTPInstancePerformanceCounters.Instance;
-
- pcs.Dispose();
- }
-
ThreadEntry[] threadEntries;
lock (_workerThreadsLock)
{
@@ -960,7 +899,7 @@ namespace Amib.Threading
{
try
{
- thread.Abort(); // Shutdown
+ //thread.Abort(); // Shutdown
te.WorkThread = null;
}
catch (SecurityException e)
@@ -1334,7 +1273,7 @@ namespace Amib.Threading
{
if (IsWorkItemCanceled)
{
- Thread.CurrentThread.Abort();
+ //Thread.CurrentThread.Abort();
}
}
@@ -1354,15 +1293,6 @@ namespace Amib.Threading
get { return _shutdown; }
}
- ///
- /// Return the local calculated performance counters
- /// Available only if STPStartInfo.EnableLocalPerformanceCounters is true.
- ///
- public ISTPPerformanceCountersReader PerformanceCountersReader
- {
- get { return (ISTPPerformanceCountersReader)_localPCs; }
- }
-
#endregion
#region IDisposable Members
@@ -1395,9 +1325,6 @@ namespace Amib.Threading
_isIdleWaitHandle = null;
}
- if (_stpStartInfo.EnableLocalPerformanceCounters)
- _localPCs.Dispose();
-
_isDisposed = true;
}
}
diff --git a/ThirdParty/SmartThreadPool/WorkItem.cs b/ThirdParty/SmartThreadPool/WorkItem.cs
index db54a15714..787b0501d2 100644
--- a/ThirdParty/SmartThreadPool/WorkItem.cs
+++ b/ThirdParty/SmartThreadPool/WorkItem.cs
@@ -427,12 +427,11 @@ namespace Amib.Threading.Internal
// If we got a ThreadAbortException and the STP is not shutting down, it means the
// work items was cancelled.
tae.GetHashCode();
- if (!SmartThreadPool.CurrentThreadEntry.AssociatedSmartThreadPool.IsShuttingdown)
- {
- Thread.ResetAbort();
- }
+ //if (!SmartThreadPool.CurrentThreadEntry.AssociatedSmartThreadPool.IsShuttingdown)
+ //{
+ // Thread.ResetAbort();
+ //}
}
-
if (!SmartThreadPool.IsWorkItemCanceled)
{
SetResult(result, exception);
@@ -728,7 +727,7 @@ namespace Amib.Threading.Internal
Thread executionThread = Interlocked.CompareExchange(ref _executingThread, null, _executingThread);
if (null != executionThread)
{
- executionThread.Abort(); // "Cancel"
+ //executionThread.Abort(); // "Cancel"
// No need to signalComplete, because we already cancelled this work item
// so it already signaled its completion.
//signalComplete = true;
@@ -745,7 +744,7 @@ namespace Amib.Threading.Internal
Thread executionThread = Interlocked.CompareExchange(ref _executingThread, null, _executingThread);
if (null != executionThread)
{
- executionThread.Abort(); // "Cancel"
+ //executionThread.Abort(); // "Cancel"
success = true;
signalComplete = true;
}