private async Task <NetworkResponse> Api_PerformMessage2(NetworkRequest request, CancellationToken cancellationToken) { _ = request ?? throw new ArgumentNullException(nameof(request)); long id; lock (nextIdLock) id = nextId++; request.Token = id; using var call = new Call(id, cancellationToken, request); calls.TryAdd(id, call); EnqueueNewMessage?.Invoke(call.Request); try { await call.Wait(); } catch (TaskCanceledException) { } calls.TryRemove(id, out _); if (call.UserToken.IsCancellationRequested) { NotifyRequestCancelled?.Invoke(call.Id); throw new TaskCanceledException(); } return(call.Response ?? throw new TaskCanceledException()); }
private void Manager_EnqueueNewMessage(NetworkRequest request) { _ = request ?? throw new ArgumentNullException(nameof(request)); EnqueueMessage(request); }
private Task <NetworkResponse> Api_PerformMessage(NetworkRequest request) => Api_PerformMessage2(request, CancellationToken.None);