数据会在一段时间内传入,而此传入数据会不断返回



我的目的是,我希望数据在同时进入,并不断返回这些传入的数据。

我把AddValue​​方法,因为我想一直添加数据。并返回实时

我的问题是我在Hub中调用GetValues,但它返回为null我试了很多不同的

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<ICollection<Stock>> GetValues()
{
return Task.FromResult(_stock.Values);
}
}

我的集线器是我把GetValues​​方法,因为我希望数据总是来。

public class MyHub : Hub
{
public readonly StockCaller _stock;
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);
}      
}
}

我通过打开一个新线程解决了这个问题。

就像这样。

public class StockCaller
{
public static ConcurrentDictionary<string, Stock> _stocks = new ConcurrentDictionary<string, Stock>();
public StockCaller()
{
Thread thread1 = new Thread(new ThreadStart(AddValue));
thread1.Start();
//AddValue();
}
public async void 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)
{
_stocks.TryAdd(stock.symbol, stock);
await Task.CompletedTask;
}
public async Task<ICollection<Stock>> GetValues()
{
return await Task.FromResult(_stocks.Values);
}
public void ClearStock()
{
_stocks.Clear();
}
}

StockHub仍然不变,但我正在共享

public class MyHub : Hub
{
public readonly StockCaller _stock;
public MyHub(StockCaller stock)
{
_stock = stock;
}
public async Task<IEnumerable<Stock>> SendRandomCharacter()
{
while (true)
{
var result = await _stock.GetValues();
await Clients.All.SendAsync("receiveMessage", result);
}        
}
}

最新更新