34 lines
1.3 KiB
C#
34 lines
1.3 KiB
C#
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace GISTech.GISDataDownloader
|
|
{
|
|
public static class TaskCancellationExtension
|
|
{
|
|
public static Task WhenCanceled(this CancellationToken cancellationToken)
|
|
{
|
|
TaskCompletionSource<bool> taskCompletionSource = new TaskCompletionSource<bool>();
|
|
cancellationToken.Register(delegate(object s)
|
|
{
|
|
((TaskCompletionSource<bool>)s).SetResult(result: true);
|
|
}, taskCompletionSource);
|
|
return taskCompletionSource.Task;
|
|
}
|
|
|
|
public static Task<T> CancelWith<T>(this Task<T> task, CancellationToken cancellationToken, bool swallowCancellationException = false)
|
|
{
|
|
return TaskCancellationInternals.CancelWithInternal(task, cancellationToken, swallowCancellationException);
|
|
}
|
|
|
|
public static Task<T> CancelWith<T>(this Task<T> task, CancellationToken cancellationToken, string message, bool swallowCancellationException = false)
|
|
{
|
|
return TaskCancellationInternals.CancelWithInternal(task, cancellationToken, message, swallowCancellationException);
|
|
}
|
|
|
|
public static Task CancelWith(this Task task, CancellationToken cancellationToken, bool swallowCancellationException = false)
|
|
{
|
|
return TaskCancellationInternals.CancelWithInternal(task, cancellationToken, swallowCancellationException);
|
|
}
|
|
}
|
|
}
|