public void SetResult(T result) { if (_source.HasTask) { _source.TrySetResult(result); } _result = result; }
public void DefaultInstanceBehavior() { ValueTaskCompletionSource <int> source = default; Assert.True(source.IsNull); Assert.False(source.IsOptimized); Assert.False(source.TrySetResult(42)); }
private void Verify(ValueTaskCompletionSource <int> source, bool shouldFault) { var task = source.Task; Assert.False(task.IsCompleted); Assert.False(task.Status == TaskStatus.RanToCompletion); if (shouldFault) { Assert.True(source.TrySetException(new FormatException())); Assert.False(source.TrySetResult(42)); Assert.False(source.TrySetException(new FormatException())); for (int i = 0; i < 2; i++) // can check multiple times { Assert.True(task.IsFaulted); Assert.True(task.IsCompleted); Assert.False(task.Status == TaskStatus.RanToCompletion); var ex = Assert.Throws <AggregateException>(() => task.Result); Assert.IsType <FormatException>(ex.InnerException); } } else { Assert.True(source.TrySetResult(42)); Assert.False(source.TrySetResult(42)); Assert.False(source.TrySetException(new FormatException())); for (int i = 0; i < 2; i++) // can check multiple times { Assert.False(task.IsFaulted); Assert.True(task.IsCompleted); Assert.True(task.Status == TaskStatus.RanToCompletion); Assert.Equal(42, task.Result); } } Assert.False(source.IsNull); // still good }
public bool TrySetResult(short token, T result) { lock (this) { if (_isComplete) { return(false); } if (token != _version) { return(false); } _isComplete = true; if (_source.HasTask) { return(_source.TrySetResult(result)); } _result = result; return(true); } }
public void SetResult(T result) { _source.TrySetResult(result); _result = result; }