Browse Source

Updated NameScopeLocator

pull/2705/head
Nikita Tsukanov 7 years ago
parent
commit
e72d6e3924
  1. 19
      src/Avalonia.Styling/Controls/NameScopeLocator.cs

19
src/Avalonia.Styling/Controls/NameScopeLocator.cs

@ -31,31 +31,28 @@ namespace Avalonia.Controls
private class NeverEndingSynchronousCompletionAsyncResultObservable<T> : IObservable<T> private class NeverEndingSynchronousCompletionAsyncResultObservable<T> : IObservable<T>
{ {
private T _value; private T _value;
private SynchronousCompletionAsyncResult<T>? _task; private SynchronousCompletionAsyncResult<T>? _asyncResult;
public NeverEndingSynchronousCompletionAsyncResultObservable(SynchronousCompletionAsyncResult<T> task) public NeverEndingSynchronousCompletionAsyncResultObservable(SynchronousCompletionAsyncResult<T> task)
{ {
if (task.IsCompleted) if (task.IsCompleted)
_value = task.GetResult(); _value = task.GetResult();
else else
_task = task; _asyncResult = task;
} }
public IDisposable Subscribe(IObserver<T> observer) public IDisposable Subscribe(IObserver<T> observer)
{ {
if (_task?.IsCompleted == true) if (_asyncResult?.IsCompleted == true)
{ {
_value = _task.Value.GetResult(); _value = _asyncResult.Value.GetResult();
_task = null; _asyncResult = null;
} }
if (_task != null) if (_asyncResult != null)
// We expect everything to handle callbacks synchronously, _asyncResult.Value.OnCompleted(() =>
// so the object graph is ready after its built
// so keep TaskContinuationOptions.ExecuteSynchronously
_task.Value.OnCompleted(() =>
{ {
observer.OnNext(_task.Value.GetResult()); observer.OnNext(_asyncResult.Value.GetResult());
}); });
else else
observer.OnNext(_value); observer.OnNext(_value);

Loading…
Cancel
Save