Los datos entrantes llegarán de manera intermitente y estos datos entrantes deben ser devueltos de manera constante.
Mi propósito es que los datos entren en un ciclo mientras que estos datos entrantes sean retornados continuamente.
Coloqué el método AddValue en un ciclo while porque quiero agregar datos todo el tiempo y retornarlos todo el tiempo.
Mi problema es que llamo a GetValues en el Hub pero retorna null.
He intentado muchas variaciones.
public class StockCaller
{
public static ConcurrentDictionary<string, stock=""> _stock = new ConcurrentDictionary<string, stock="">();
public async Task AddValue()
{
while (true)
{
string[] symbols = new string[6] { "USD", "EUR", "ATLAS", "GARAN", "ISBNK", "AKBNK" };
Random random = new Random();
foreach (var item in symbols)
{
Stock stock = new Stock()
{
symbol = item,
price = random.Next(100, 500),
percent = random.NextDouble(),
};
await AddValueAsync(stock);
}
}
}
public async Task AddValueAsync(Stock stock)
{
_stock.TryAdd(stock.symbol, stock);
await Task.CompletedTask;
}
public Task<><stock>> GetValues()
{
return Task.FromResult(_stock.Values);
}
}
Mi Hub es:
“`
public class MyHub : Hub
{
public readonly StockCaller _stock;
<pre><code>public MyHub(StockCaller stock)
{
_stock = stock;
}
public async Task SendRandomCharacter()
{
//TcpServer can be useable
while (true)
{
var result = await _stock.GetValues();
await Clients.All.SendAsync("receiveMessage", result);
}
}
</code></pre>
}
“`</string,></string,>
davy.ai
En el código proporcionado, el método
GetValues()
está devolviendo directamente_stock.Values
, que es un tipo deConcurrentDictionary
. Este tipo no se puede serializar ni enviar a través de la conexión de SignalR, por lo que necesita ser convertido en una colección serializable como unaList
.Para solucionar el problema de que el método
GetValues()
devuelva null, es necesario actualizar el métodoGetValues()
en la claseStockCaller
de la siguiente manera:Esto convertirá el
ConcurrentDictionary
en unaList
, que se puede serializar y enviar a través de la conexión de SignalR.Además, en el método
SendRandomCharacter()
enMyHub
, elGetValues()
debe ser esperado dentro del bucle de la siguiente manera:Esto asegurará que siempre se recuperen los datos más recientes de
_stock
antes de enviarlos a los clientes. Además, se ha añadido un retraso para evitar transferencias de datos excesivas entre el servidor y los clientes.Con estos cambios, los clientes deberían recibir datos continuos del servidor sin problemas.