diff --git a/src/Community.VisualStudio.Toolkit.Shared/ExtensionMethods/TaskExtensions.cs b/src/Community.VisualStudio.Toolkit.Shared/ExtensionMethods/TaskExtensions.cs index 7c4ead3..f0a94ef 100644 --- a/src/Community.VisualStudio.Toolkit.Shared/ExtensionMethods/TaskExtensions.cs +++ b/src/Community.VisualStudio.Toolkit.Shared/ExtensionMethods/TaskExtensions.cs @@ -1,4 +1,5 @@ using System; +using Community.VisualStudio.Toolkit; namespace Microsoft.VisualStudio.Shell { @@ -14,7 +15,7 @@ public static class TaskExtensions /// public static void FireAndForget(this System.Threading.Tasks.Task task) { - ThreadHelper.JoinableTaskFactory.RunAsync(async () => + VS.JoinableTaskFactory.RunAsync(async () => { try { diff --git a/src/Community.VisualStudio.Toolkit.Shared/VS.cs b/src/Community.VisualStudio.Toolkit.Shared/VS.cs index 3daf33b..31776af 100644 --- a/src/Community.VisualStudio.Toolkit.Shared/VS.cs +++ b/src/Community.VisualStudio.Toolkit.Shared/VS.cs @@ -3,6 +3,7 @@ using EnvDTE80; using Microsoft; using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Threading; namespace Community.VisualStudio.Toolkit { @@ -11,6 +12,23 @@ namespace Community.VisualStudio.Toolkit /// public static class VS { + private static JoinableTaskFactory _jtf = ThreadHelper.JoinableTaskFactory; + + /// + /// Initializes the entry point. + /// This is an optional but recommended step in order to optimize use of the JoinableTaskFactory. + /// Call this method at the start of the extension's AsyncPackage's InitializeAsync method and pass + /// the AsyncPackage.JoinableTaskFactory as the argument. + /// + /// The JoinableTaskFactory instance from the extension's AsyncPackage. + public static void Initialize(JoinableTaskFactory jtf) + { + _jtf = jtf; + } + + /// The JoinableTaskFactory either from the extension's package or from ThreadHelper. See . + public static JoinableTaskFactory JoinableTaskFactory => _jtf; + /// A collection of services related to the command system. public static Commanding Commanding => new(); diff --git a/test/VSSDK.TestExtension/VSSDK.TestExtensionPackage.cs b/test/VSSDK.TestExtension/VSSDK.TestExtensionPackage.cs index a73dd6b..39d7262 100644 --- a/test/VSSDK.TestExtension/VSSDK.TestExtensionPackage.cs +++ b/test/VSSDK.TestExtension/VSSDK.TestExtensionPackage.cs @@ -27,6 +27,8 @@ public sealed class TestExtensionPackage : AsyncPackage { protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress) { + VS.Initialize(JoinableTaskFactory); + await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); await TestCommand.InitializeAsync(this); await RunnerWindowCommand.InitializeAsync(this);