gpt4 book ai didi

c# - 等待来自不同类(class)的任务

转载 作者:行者123 更新时间:2023-11-30 15:59:18 25 4
gpt4 key购买 nike

我有一个单例类和一个从另一个类(b 类)设置的属性,没问题。我想要一个不同的类(a 类)无限期地等待,直到单例类中的属性转换为真。我想要最有效的方法来做到这一点,所以我觉得任务很理想,但我无法有效地将所有部分组合在一起。我不想继续轮询和 sleep 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;
}
}

最佳答案

我会为此使用 TaskCompletionSource。你会做这样的事情:

public class Monitor
{
private TaskCompletionSource<bool> _changedTaskSource = new TaskCompletionSource<bool>();
public Task HasChangedTask => _changedTaskSource.Task;

public bool HasChanged
...
set
{
...
_changedTaskSource.TrySetResult(true);
}
}

这会设置一个任务完成源,并在值发生变化时完成任务。你会像这样等待它:

await Monitor.Instance.HasChangedTask;

您的问题中有一件事情不清楚,您需要解决的是重置任务。为此,只需重新创建 TaskCompletionSource

关于c# - 等待来自不同类(class)的任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41753165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com