我有一个工作单元,我在一个线程(不是主线程).在某些情况下,我想让这个线程睡10秒钟.Thread.Sleep(10000)是最有效的方法吗?
我如何编写单元测试以确保获得锁定?
例如:
public void AddItem(object item)
{
lock (_list)
{
_list.Add(item)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确保lock语句运行?
编辑:我不是要试图证明线程安全(我会假设),只是调用了lock()语句.
例如,我可以new object()通过在CreateObject()工厂函数中替换它来测试语句.
我在VS 2010中使用C#.Net4.0.如何重新启动Thread?
它就像我想要Abort()的线程和Start()它从一开始?可能吗?
我的目标是在我的应用程序中使用线程安全功能和异常处理的约定.我对线程管理/多线程的概念比较陌生.我在用.NET 3.5
我写了下面的辅助方法看完这篇文章后总结我的所有锁定动作http://blogs.msdn.com/b/ericlippert/archive/2009/03/06/locks-and-exceptions-do-not-mix. aspx,它是针对这个问题而链接的,Monitor vs lock.
我的想法是,如果我在我的应用程序中一致地使用此约定,那么编写线程安全代码并在线程安全代码中处理错误将更容易,而不会破坏状态.
public static class Locking
{
private static readonly Dictionary<object,bool> CorruptionStateDictionary = new Dictionary<object, bool>();
private static readonly object CorruptionLock = new object();
public static bool TryLockedAction(object lockObject, Action action, out Exception exception)
{
if (IsCorrupt(lockObject))
{
exception = new LockingException("Cannot execute locked action on a corrupt object.");
return false;
}
exception = null;
Monitor.Enter(lockObject);
try
{
action.Invoke();
}
catch (Exception ex)
{
exception = ex;
}
finally
{ …Run Code Online (Sandbox Code Playgroud)