Клиент SignalR не обрабатывает полученные данные асинхронно - PullRequest
0 голосов
/ 05 марта 2019

Моя проблема заключается в следующем: у меня есть сервер 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();
    }
}

Теперь проблема заключается в том, что Клиент ожидает завершения функции на стороне сервера и только после этого начинает обрабатывать данные.

В идеале Клиент должен начать обрабатывать данные, как только они будут получены.И да, сервер отправляет его асинхронно.Я подтвердил это через Точки останова.

Возможно ли это?

Спасибо

...