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);