IAsyncManager CreateAsyncManager ()
{
// NOTE: under VS2012, an installer should install the Microsoft.VisualStudio.Threading.Downlevel.vsix
// from the Microsoft.VisualStudio.Threading.DownlevelInstaller nuget package via an MSI.
// VS2012 case
var context = (JoinableTaskContext)serviceProvider.GetService(typeof(SVsJoinableTaskContext));
if (context != null)
return new AsyncManager (context);
// VS2013+ case
var schedulerService = (IVsTaskSchedulerService2)serviceProvider.GetService(typeof(SVsTaskSchedulerService));
if (schedulerService != null)
return new AsyncManager ((JoinableTaskContext)schedulerService.GetAsyncTaskContext ());
throw new NotSupportedException(Strings.AsyncManagerProvider.NoTaskContext);
}
}