我在采访中不断被问及AppDomains,我知道基础知识:
我仍然没有得到使他们成为必要的东西.当你使用一个时,我正在寻找一个合理的具体情况.
回答:
还要别的吗?
让我们尝试使用示例类SomeThread,我们试图阻止在Running属性设置为false之后调用DoSomething方法,并且由OtherThread类调用Dispose,因为如果在Dispose方法之后调用它们,则世界将以我们结束知道.
感觉因为循环,有可能发生邪恶的事情.在调用DoSomething方法之前,在启动下一个循环和锁定之前,可以将Running更改为false,并在它到达锁定之前调用Disposed.在这种情况下,生活不会很好.
当我在一个简单易于维护的方法中使用循环时,我正在研究如何处理这个问题.为了记录,我确实考虑过Double Lock Check图案,但它似乎并不适合C#.
警告:这是一个简化的示例,试图让您更容易关注循环和锁定问题.如果我没有详细说明某些地方请告诉我,我会尽力填写任何细节.
public class SomeThread : IDisposable
{
private object locker = new object();
private bool running = false;
public bool Running
{
get
{
lock(locker)
{
return running;
}
}
set
{
lock(locker)
{
running = value;
}
}
}
public void Run()
{
while (Running)
{
lock(locker)
{
DoSomething1();
DoSomething2();
}
}
}
private void DoSomething1()
{
// something awesome happens here
}
private void DoSomething2()
{
// something more awesome happens here …Run Code Online (Sandbox Code Playgroud) 我需要为长时间运行的线程添加超时.我们遇到了一些外部问题,这些问题有时会导致该线程无限期地挂在某一行代码上.为了使我们的进程更健壮,我们希望检测到线程不再主动运行/轮询并中止线程.这将让我们清理资源并重新启动线程.
添加此功能的首选方法是什么?