コード例 #1
0
        public async Task SetActivityResponseAsync(IActivityResponse activityResponse)
        {
            if (ReferenceEquals(this._ActivityResponse, activityResponse))
            {
                return;
            }

            if (activityResponse is null)
            {
                throw new ArgumentNullException(nameof(activityResponse));
            }

            var prev = System.Threading.Interlocked.CompareExchange(ref this._ActivityResponse, activityResponse, null);

            if (prev is null)
            {
                var activityEvent = activityResponse.GetAsActivityEvent(this);
                await this.AddActivityEventAsync(activityEvent);

                this._ActivityCompletion.TrySetResult(activityResponse);
            }
            else
            {
                throw new ArgumentException("already set", nameof(activityResponse));
            }
        }