У меня есть одноэлементный класс и свойство, которое устанавливается из другого класса (класс b), без проблем. Я хочу, чтобы другой класс (класс a) ожидал бесконечно до тех пор, пока свойство в singleton-классе не перейдет в true. Я хочу наиболее эффективный способ сделать это, поэтому я чувствовал, что задачи идеальны, но я не могу эффективно объединить все части. Я не хочу продолжать опрос и спать thread.sleep.Ожидание задания из другого класса
public class A
{
public static void Main(string[] args)
{
if(!Monitor.Instance.HasChanged)
{
//await until the task in the Monitor class is complete
}
}
}
public class Monitor
{
private static Monitor instance;
private bool _hasChanged;
private Monitor() { }
public static Monitor Instance
{
get
{
if (instance == null)
{
instance = new Monitor();
}
return instance;
}
}
public bool HasChanged
{
get
{
return _hasChanged;
}
set
{
_hasChanged = value;
if (_hasChanged)
{
//kick off a task
}
}
}
}
public class B
{
private static readonly Monitor _instance;
public void DoSomething()
{
Monitor.Instance.HasChanged = true;
}
}
Спасибо, я подтвержу это завтра. Последний вопрос, так как я не эксперт. Потребитель в настоящее время не является асинхронным методом, поэтому ожидание имеет проблемы. Было бы легко сделать метод async, но, на мой вопрос, оказывает ли это какое-либо влияние на всех вызывающих абонентов, которые ранее использовали это как метод non-async? – Roka
@Roka Обычно ожидается, что все вызовет цепочку вызовов. Если вы хотите синхронное ожидание, «Task.Wait» прекрасно, но имейте в виду, что вы можете блокировать вещь, которая пытается изменить вашу переменную. – BradleyDotNET