Есть ли смысл использовать lock в приведенном коде? - C#

Узнай цену своей работы

Формулировка задачи:

Я правильно понимаю, что lock в данном случае не имеет смысла (см.

LostConnectionWithController

)? Это Callback на стороне клиента.
    [CallbackBehavior(UseSynchronizationContext = false)]
    public class DataServiceCallback : IDataServiceCallback
    {
        private  ControllerDisconnectedViewModel _ctrllerDisconnectVm;
        private static readonly object _lostConnectionWithController = new object();
 
        /// <summary>Потеряно соединение с PLC</summary>
        public void LostConnectionWithController()
        {
            Task.Factory.StartNew(() =>
            {
                try
                {
                    lock (_lostConnectionWithController)
                    {
                        DispatcherHelper.UIDispatcher.Invoke(() =>
                        {
                            if (!WindowManager.Instance.IsPlcDisconnectedDialogOpened)
                            {
                                _ctrllerDisconnectVm = WindowManager.Instance.OpenControllerDisconnectedDialog();
                                _ctrllerDisconnectVm.CountdownTimerStopped +=
                                    ControllerDisconnectVm_CountdownTimerStopped;
                                var main = ServiceLocator.Current.GetInstance<MainViewModel>();
                                main.IsConnectedWithPlc.State = false; //блокируем частично UI
                                main.IsControllerBusy.State = true;
                                main.UpdateConnectionState();
                            }
                            else
                                WindowManager.Instance.ResetShutdownCounterDisconnectedDialog();
                            //Сброс обратного отсчёта
 
                        });
                    }
                }
                catch (Exception ex)
                {
                    LogManager.Current.Log.AppendException(ex);
                }
            });
        }
 
        //Таймер во вью модели останавливается, окно "Потеряно соединение с контроллером" закрывается
        void ControllerDisconnectVm_CountdownTimerStopped(object sender, EventArgs e)
        {
            DispatcherHelper.UIDispatcher.Invoke(() =>
            {
                var controllerDisconnectVm = (ControllerDisconnectedViewModel)sender;
                controllerDisconnectVm.CountdownTimerStopped -= ControllerDisconnectVm_CountdownTimerStopped;
 
                var main = ServiceLocator.Current.GetInstance<MainViewModel>();
                main.IsConnectedWithPlc.State = true; //включаем ранее частично заблокированный UI
                main.IsControllerBusy.State = false;
                main.UpdateConnectionState();
            });
        }
    }

Решение задачи: «Есть ли смысл использовать lock в приведенном коде?»

textual
Листинг программы
      DispatcherHelper.UIDispatcher.BeginInvoke(() =>
      {
        try
        {
 
        }
        catch (Exception ex)
        {
          LogManager.Current.Log.AppendException(ex);
        }
      });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5