Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit f356907

Browse files
committed
Add fix for hanging InitializeAsync
1 parent 0039538 commit f356907

File tree

1 file changed

+27
-34
lines changed

1 file changed

+27
-34
lines changed

src/GitHub.App/ViewModels/GitHubPane/GitHubPaneViewModel.cs

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ public sealed class GitHubPaneViewModel : ViewModelBase, IGitHubPaneViewModel, I
4646
readonly ReactiveCommand<Unit> refresh;
4747
readonly ReactiveCommand<Unit> showPullRequests;
4848
readonly ReactiveCommand<object> openInBrowser;
49-
readonly SemaphoreSlim initializing = new SemaphoreSlim(1);
50-
bool initialized;
49+
Task initializeTask;
5150
IViewModel content;
5251
ILocalRepositoryModel localRepository;
5352
string searchQuery;
@@ -198,39 +197,9 @@ public void Dispose()
198197
}
199198

200199
/// <inheritdoc/>
201-
public async Task InitializeAsync(IServiceProvider paneServiceProvider)
200+
public Task InitializeAsync(IServiceProvider paneServiceProvider)
202201
{
203-
await initializing.WaitAsync();
204-
if (initialized) return;
205-
206-
try
207-
{
208-
await UpdateContent(teamExplorerContext.ActiveRepository);
209-
teamExplorerContext.WhenAnyValue(x => x.ActiveRepository)
210-
.Skip(1)
211-
.ObserveOn(RxApp.MainThreadScheduler)
212-
.Subscribe(x => UpdateContent(x).Forget());
213-
214-
connectionManager.Connections.CollectionChanged += (_, __) => UpdateContent(LocalRepository).Forget();
215-
216-
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.pullRequestCommand, showPullRequests);
217-
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.backCommand, navigator.NavigateBack);
218-
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.forwardCommand, navigator.NavigateForward);
219-
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.refreshCommand, refresh);
220-
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.githubCommand, openInBrowser);
221-
222-
paneServiceProvider.AddCommandHandler(Guids.guidGitHubToolbarCmdSet, PkgCmdIDList.helpCommand,
223-
(_, __) =>
224-
{
225-
browser.OpenUrl(new Uri(GitHubUrls.Documentation));
226-
usageTracker.IncrementCounter(x => x.NumberOfGitHubPaneHelpClicks).Forget();
227-
});
228-
}
229-
finally
230-
{
231-
initialized = true;
232-
initializing.Release();
233-
}
202+
return initializeTask = initializeTask ?? CreateInitializeTask(paneServiceProvider);
234203
}
235204

236205
/// <inheritdoc/>
@@ -304,6 +273,30 @@ public Task ShowPullRequest(string owner, string repo, int number)
304273
x => x.RemoteRepositoryOwner == owner && x.LocalRepository.Name == repo && x.Number == number);
305274
}
306275

276+
async Task CreateInitializeTask(IServiceProvider paneServiceProvider)
277+
{
278+
await UpdateContent(teamExplorerContext.ActiveRepository);
279+
teamExplorerContext.WhenAnyValue(x => x.ActiveRepository)
280+
.Skip(1)
281+
.ObserveOn(RxApp.MainThreadScheduler)
282+
.Subscribe(x => UpdateContent(x).Forget());
283+
284+
connectionManager.Connections.CollectionChanged += (_, __) => UpdateContent(LocalRepository).Forget();
285+
286+
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.pullRequestCommand, showPullRequests);
287+
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.backCommand, navigator.NavigateBack);
288+
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.forwardCommand, navigator.NavigateForward);
289+
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.refreshCommand, refresh);
290+
BindNavigatorCommand(paneServiceProvider, PkgCmdIDList.githubCommand, openInBrowser);
291+
292+
paneServiceProvider.AddCommandHandler(Guids.guidGitHubToolbarCmdSet, PkgCmdIDList.helpCommand,
293+
(_, __) =>
294+
{
295+
browser.OpenUrl(new Uri(GitHubUrls.Documentation));
296+
usageTracker.IncrementCounter(x => x.NumberOfGitHubPaneHelpClicks).Forget();
297+
});
298+
}
299+
307300
OleMenuCommand BindNavigatorCommand<T>(IServiceProvider paneServiceProvider, int commandId, ReactiveCommand<T> command)
308301
{
309302
Guard.ArgumentNotNull(paneServiceProvider, nameof(paneServiceProvider));

0 commit comments

Comments
 (0)