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)); } }