1

私の問題は次のとおりです。基本的な SignalR 機能を備えた ASP.NET WEB API サーバー (コアではない) があります。

基本的に接続されたクライアントでは、複数のデータセットをクライアントに返します

私の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();
    }
}

ここでの問題は、クライアントがサーバー側の機能が終了するまで待機し、その後で初めてデータの処理を開始することです。

理想的には、クライアントはデータを受信するとすぐに処理を開始します。はい、サーバーはそれを非同期で送信しています。ブレークポイントで確認しました。

これは可能ですか?

ありがとう

4

0 に答える 0