Моя проблема заключается в следующем: у меня есть сервер ASP.NET WEB API (не Core) с базовыми функциями SignalR.
В основном при подключении к клиенту, я возвращаю клиенту несколько наборов данных
В моем DataHub.cs
public class DataHub : Hub
{
public override Task OnConnected()
{
Init(Context.ConnectionId);
return base.OnConnected();
}
private async void Init(string clientId)
{
//takes about 90 seconds which is inacceptable for loading data into my application
await CustomClass.VeryLongTaskAsync();
}
}
В моем CustomClass.cs
public class CustomClass
{
private IHubContext _context = GlobalHost.ConnectionManager.GetHubContext<DataHub>();
public async Task VeryLongTaskAsync()
{
for (int i = 0; i<90; i++)
{
SendData(new Image(){
Count = i
});
Thread.Sleep(1000);
}
}
private async Task SendData(Image image)
{
await _context.Clients.Client(_clientID).sendData(image);
}
}
Мой клиент использует следующий код
public constructor()
{
var _connection = new HubConnection(ServerURI, false);
var _hubProxy = _connection.CreateHubProxy("DataHub");
_hubProxy.On<Image>("sendData", (image) =>
{
//Process Data
});
try
{
await _connection.Start();
}
}
Теперь проблема заключается в том, что Клиент ожидает завершения функции на стороне сервера и только после этого начинает обрабатывать данные.
В идеале Клиент должен начать обрабатывать данные, как только они будут получены.И да, сервер отправляет его асинхронно.Я подтвердил это через Точки останова.
Возможно ли это?
Спасибо