Мне нужно отправить параллельно несколько запросов Post. Для этого я собираюсь использовать следующий код:
try
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", $"key={customer.FCMServerKey}");
var obj = new
{
to = customer.FcmRegistrationId,
notification = new
{
title = push.PushTitle,
body = push.PushBody,
}
};
string json = JsonConvert.SerializeObject(obj);
var data = new StringContent(json, Encoding.UTF8, "application/json");
responseTasks.Add( client.PostAsync("https://fcm.googleapis.com/fcm/send", data));
pushes.Add(push);
}
}
catch (HttpRequestException ex)
{
Console.WriteLine("\nException with pushing!");
Console.WriteLine("Message :{0} ", ex.Message);
}
}
var responses = await Task.WhenAll(responseTasks);
var count = 0;
foreach (var response in responses)
{
var responseBody = await response.Content.ReadAsStringAsync();
pushes[count].FCMResponse = responseBody;
pushes[count].Sent = response.IsSuccessStatusCode;
Console.WriteLine("FCM response:");
Console.WriteLine(pushes[count].FCMResponse);
count++;
}
await _pushRepository.SaveAsync(pushes);
}
Как вы можете видеть, я поместил объекты моей задачи в responseTasks
. Затем я собираюсь отправить все запросы с помощью этой строки:
var responses = await Task.WhenAll(responseTasks);
I, как результат, у меня есть это исключение:
Необработанное исключение: System.Threading.Tasks.TaskCanceledException: операция была отменена. ---> System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. Имя объекта: «System.Net.Sockets.NetworkStream». в System.Net.Sockets.NetworkStream.WriteAsync (буфер Byte [], смещение Int32, размер Int32, CancellationToken cancellationToken) в System.IO.Stream.WriteAsync (буфер Byte [], смещение Int32, число Int32) в System.Net. Security.SslState.StartSendBlob (Byte [] входящий, Int32 count, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslState.ForceAuthentication (логический буфер receiveFirst, Byte [], AsyncProtocolRequest asyncRequestSecurity.ProjectSecurity.Secure.Security.Sec. LazyAsyncResult lazyResult) при System.Net.Security.SslStream.BeginAuthenticateAsClient (SslClientAuthenticationOptions sslClientAuthenticationOptions, CancellationToken CancellationToken, AsyncCallback AsyncCallback, Object asyncState) при System.Net.Security.SslStream. <> c.b__47_0 (SslClientAuthenticationOptions arg1, CancellationToken арг2, AsyncCallback обратного вызова,Состояние объекта) в System.Threading.Tasks.TaskFactory 1.FromAsyncImpl[TArg1,TArg2](Func
5 beginMethod, Func 2 endFunction, Action
1 endAction, TArg1 arg1, TArg2 arg2, Состояние объекта, TaskCreationOptионы creationOptions) в System.Threading.Tasks.TaskFactory.FromAsync [TArg1, TArg2] (Func 5 beginMethod, Action
1 endMethod, TArg1 arg1, TArg2 arg2, состояние объекта, TaskCreationOptions creationOptions) в System.Threading.Tasks.Arg.Tasks.Task.Fas, TArg2] (Func 5 beginMethod, Action
1 endMethod, TArg1 arg1, TArg2 arg2, состояние объекта) в System.Net.Security.SslStream.AuthenticateAsClientAsync (SslClientAuthenticationOptions sslClientAuthenticationOptions, Атрибут узла Connect.SentConnection.Exjects.Connect.Conneccess.HecConject.Hecen.Connect.Exject.Secen.Conne.Conne.Conne.Conne.Conne.Conne.Conne.Conne.Conne.SecConnect.SecConnect.Confile.Confile.Confile.Connect.Connect.Connect ).Cф_синтез.оклон.узел_связи.цена. , SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) --- Конец внутренней трассировки стека исключений --- в System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore (Поток потока, SslClientAuthenticationOptions sslOptions, 1010 * * * * * * * * * * * * * * * * * * * * 105 * * * * * * * * * *) *6 * * * * * *6не так?