# Conflicts: # .github/workflows/codeql-analysis.yml # src/Umbraco.Core/CompositionExtensions.cs # src/Umbraco.Core/Constants-AppSettings.cs # src/Umbraco.Core/GuidUdi.cs # src/Umbraco.Core/Models/PublishedContent/IPublishedContent.cs # src/Umbraco.Core/PublishedContentExtensions.cs # src/Umbraco.Core/Routing/DefaultUrlProvider.cs # src/Umbraco.Core/Routing/UrlProvider.cs # src/Umbraco.Core/Routing/UrlProviderExtensions.cs # src/Umbraco.Core/Runtime/MainDom.cs # src/Umbraco.Core/Services/IRuntimeState.cs # src/Umbraco.Core/StringExtensions.cs # src/Umbraco.Core/Sync/ApplicationUrlHelper.cs # src/Umbraco.Core/Sync/DatabaseServerRegistrar.cs # src/Umbraco.Core/Sync/IServerRegistrar.cs # src/Umbraco.Infrastructure/Media/EmbedProviders/Instagram.cs # src/Umbraco.Infrastructure/Models/ContentBaseExtensions.cs # src/Umbraco.Infrastructure/PropertyEditors/NestedContentPropertyEditor.cs # src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ImageCropperValue.cs # src/Umbraco.Tests/Misc/ApplicationUrlHelperTests.cs # src/Umbraco.Tests/Routing/UrlProviderTests.cs # src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs # src/Umbraco.Tests/TestHelpers/TestObjects.cs # src/Umbraco.Web.UI/Umbraco/Views/Default.cshtml # src/Umbraco.Web.UI/Views/Partials/Grid/Editors/Rte.cshtml # src/Umbraco.Web/CompositionExtensions.cs # src/Umbraco.Web/HtmlHelperBackOfficeExtensions.cs # src/Umbraco.Web/ImageCropperTemplateExtensions.cs # src/Umbraco.Web/Models/Mapping/ContentMapDefinition.cs # src/Umbraco.Web/PropertyEditors/MultiUrlPickerPropertyEditor.cs # src/Umbraco.Web/PublishedContentExtensions.cs # src/Umbraco.Web/Runtime/WebInitialComponent.cs # src/Umbraco.Web/Runtime/WebInitialComposer.cs # src/Umbraco.Web/Templates/TemplateUtilities.cs # src/Umbraco.Web/UmbracoContext.cs # src/Umbraco.Web/UmbracoHelper.cs # src/Umbraco.Web/UmbracoInjectedModule.cs
81 lines
3.2 KiB
C#
81 lines
3.2 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Umbraco.Web.Scheduling
|
|
{
|
|
internal static class TaskAndFactoryExtensions
|
|
{
|
|
#region Task Extensions
|
|
|
|
// TODO: Not used, is this used in Deploy or something?
|
|
static void SetCompletionSource<TResult>(TaskCompletionSource<TResult> completionSource, Task task)
|
|
{
|
|
if (task.IsFaulted)
|
|
completionSource.SetException(task.Exception.InnerException);
|
|
else
|
|
completionSource.SetResult(default(TResult));
|
|
}
|
|
|
|
// TODO: Not used, is this used in Deploy or something?
|
|
static void SetCompletionSource<TResult>(TaskCompletionSource<TResult> completionSource, Task<TResult> task)
|
|
{
|
|
if (task.IsFaulted)
|
|
completionSource.SetException(task.Exception.InnerException);
|
|
else
|
|
completionSource.SetResult(task.Result);
|
|
}
|
|
|
|
// TODO: Not used, is this used in Deploy or something?
|
|
public static Task ContinueWithTask(this Task task, Func<Task, Task> continuation)
|
|
{
|
|
var completionSource = new TaskCompletionSource<object>();
|
|
task.ContinueWith(atask => continuation(atask).ContinueWith(
|
|
atask2 => SetCompletionSource(completionSource, atask2),
|
|
// Must explicitly specify this, see https://blog.stephencleary.com/2013/10/continuewith-is-dangerous-too.html
|
|
TaskScheduler.Default),
|
|
// Must explicitly specify this, see https://blog.stephencleary.com/2013/10/continuewith-is-dangerous-too.html
|
|
TaskScheduler.Default);
|
|
return completionSource.Task;
|
|
}
|
|
|
|
// TODO: Not used, is this used in Deploy or something?
|
|
public static Task ContinueWithTask(this Task task, Func<Task, Task> continuation, CancellationToken token)
|
|
{
|
|
var completionSource = new TaskCompletionSource<object>();
|
|
task.ContinueWith(atask => continuation(atask).ContinueWith(
|
|
atask2 => SetCompletionSource(completionSource, atask2),
|
|
token,
|
|
TaskContinuationOptions.None,
|
|
// Must explicitly specify this, see https://blog.stephencleary.com/2013/10/continuewith-is-dangerous-too.html
|
|
TaskScheduler.Default),
|
|
token,
|
|
TaskContinuationOptions.None,
|
|
// Must explicitly specify this, see https://blog.stephencleary.com/2013/10/continuewith-is-dangerous-too.html
|
|
TaskScheduler.Default);
|
|
return completionSource.Task;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TaskFactory Extensions
|
|
|
|
public static Task Completed(this TaskFactory factory)
|
|
{
|
|
var taskSource = new TaskCompletionSource<object>();
|
|
taskSource.SetResult(null);
|
|
return taskSource.Task;
|
|
}
|
|
|
|
public static Task Sync(this TaskFactory factory, Action action)
|
|
{
|
|
var taskSource = new TaskCompletionSource<object>();
|
|
action();
|
|
taskSource.SetResult(null);
|
|
return taskSource.Task;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|