Стоит задача парсинга биржи криптовалют в n-потоков. Я сделал все на основе паттерна Singleton
, чуть изменив его
var pairs = new List<string>
{
"BTC-LTC",
"BTC-DOGE",
"BTC-VTC",
"BTC-PPC",
"BTC-FTC"
};
for (int i = 0; i < pairs.Count; i++)
{
var single = Singleton.GetInstance;
single.Run(pairs[i], "wss://socket.bittrex.com/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=" + token + "");
}
Есть ли более элегантный метод организации данной логики? Основная проблема в том, чтобы параллельно запускать потоки, а не последовательно как щас
public class AskBid
{
public double price { get; set; }
public double count { get; set; }
public string tip { get; set; }
}
public sealed class Singleton
{
private static volatile Singleton instance;
private static object sync = new Object();
public List<Runner> list = new List<Runner>();
public void Run(string pair, string socketUrl)
{
var t = list.Where(x => x.pair == pair);
if (t.Count() == 0)
{
list.Add(new Runner(pair, socketUrl));
}
}
public void Close(string pair)
{
var t = list.Where(x => x.pair == pair);
if (t.Count() != 0)
{
t.First().Close();
list.Remove(t.First());
}
}
public static Singleton GetInstance
{
get
{
if (instance == null)
{
lock (sync)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
public class Runner
{
private WebSocket websocket;
private List<AskBid> listAskBid = new List<AskBid>();
public string pair;
private string socketUrl;
public Runner(string pair, string socketUrl)
{
this.pair = pair;
this.socketUrl = socketUrl;
Run();
}
public void Run()
{
websocket = new WebSocket(socketUrl, "", null, null, "", "",
WebSocketVersion.None, null, System.Security.Authentication.SslProtocols.Tls12);
websocket.Opened += (a, b) =>
{
Console.WriteLine("Socket opened");
};
websocket.Closed += (a, b) => { Console.WriteLine("Socket closed"); };
websocket.MessageReceived += (a, b) =>
{
};
websocket.Open();
}
public void Send(string str)
{
websocket.Send(str);
}
public void Close()
{
websocket.Close();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок