Мне нужно создать службу ac #, которая должна управлять вызовами многопоточных методов.В этой службе размещается клиент SignalR, в котором я определяю метод DoPrint(...)
, который можно вызывать с сервера SignaR.Затем службе приходилось опрашивать каждые х секунд принтер, установленный на рабочей станции, на которой запущена служба, методом PrinterManager(...)
.Я должен был быть уверен, что вызовы PrinterManager(..)
и вызовы DoPrint(...)
методов происходят в разных потоках, и они не будут мешать друг другу в случае современного сценария вызовов.
Так что в методе startВ процессе я реализовал следующий код, где таймер System.Timers.Timer
:
public static void Start()
{
List<string> printerList = new List<string>();
bool bFirstTime = true;
SignalRCommunication(printerList);
Timer timer = new Timer(TimeSpan.FromMinutes(10).TotalMilliseconds)
{
AutoReset = true
};
timer.Elapsed += delegate { PrinterManager(ref printerList, ref bFirstTime); };
timer.Start();
PrinterManager(ref printerList, ref bFirstTime);
}
private static void SignalRCommunication(List<string> printerList)
{
var printAgentId = InstallationConfigurationSection.InstallationSection.CodeId;
var queryString = new Dictionary<string, string> { { "PrintAgentId", printAgentId } };
var hubConnection = new HubConnection($"{SignalRConfigurationSection.SignalRSection.Address}:{SignalRConfigurationSection.SignalRSection.Port}", queryString);
IHubProxy printDispatcherHubProxy = hubConnection.CreateHubProxy("B80PrintDispatcherHub");
hubConnection.Start().Wait();
//Metodo che viene richiamato dal server SignalR
printDispatcherHubProxy.On("ClientNotified", () =>
{
logger.Info("Effettuo la stampa come da chiamata Power Builder");
DoPrint(printerList);
});
}
// Method called from the SignaR server
private static DoPrint(List<string> printerList){...}
// Method called from Timers.Timer timer
private static PrinterManager(ref List<string> printerList, ref bool bFirstTime)
Является ли мой код многопоточным?Если да, как я могу проверить его многопоточность?