Esempio n. 1
0
 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
        }
Esempio n. 4
0
 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;
 }