C # SignalR клиент с таймером, выполняющимся в другом потоке - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужно создать службу 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)

Является ли мой код многопоточным?Если да, как я могу проверить его многопоточность?

...