Tag: contextswitchdeadlock

C#httpClient(用于异步调用的块)死锁

现在的情况 有一个客户端通过HttpClient.GetAsync执行get请求。 不幸的是,出于某种原因,我们需要阻止这些电话。 为了做到这一点,使用这个Asynchelper类是为了避免上下文切换死锁(而不仅仅是使用.Result) public static class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.Default); public static void RunSync(Func func) { AsyncHelper._myTaskFactory .StartNew(func) .Unwrap() .GetAwaiter() .GetResult(); } } 然后实际调用如下所示: AsyncHelper.RunSync(Async Function() Await _httpClient.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead)) 问题 在使用Netlimiter降低网络速度的压力测试期间,我们遇到了未完成的请求的问题。 例如,当我终止网络连接时(在NetLimiter中),这样的请求将永远留在客户端。 它将保留在AsyncHelper.RunSync调用中,直到它进入httpClient.Timeout。 当连接丢失时,是否应该有一个例外结束此呼叫? 我错过了什么吗?

contextswitchdeadlock

在VS 2008中调试我的程序时,我遇到了以下错误: CLR无法从COM上下文0x34fc1a0过渡到COM上下文0x34fc258 60秒。 拥有目标上下文/公寓的线程很可能是执行非抽空等待或处理非常长时间运行的操作而不抽取Windows消息。 这种情况通常会对性能产生负面影响,甚至可能导致应用程序变得无响应或内存使用量随时间不断累积。 为了避免这种情况 它似乎是死锁,即使代码只包含一个简单的C#计时器:请参阅下面的代码段: private void RequestWork() { // The timer will be re-intialised if there are still no wating jobs in the database StopTimer(); // assign all the threads some work InitialiseTimer(); } /// /// Initialise a timer with a timer interval configured from app.config. Enable the timer and /// […]

.NET – 检测到ContextSwitchDeadlock

我在c#(.net 3.5 cp,vs2010)中有一个类,它执行复杂的计算,这通常需要很长时间。 一分钟后,抛出exception,检测到ContextSwitchDeadlock。 exception是本地化的,对于我的非英语语言,所以我不能复制粘贴,但意思如下:¨CLR模块无法从上下文COM …转换到上下文COM … 60秒。 拥有目标上下文/公寓的子进程可能正在进行非抽空等待或处理非常长时间运行的操作而不会抽取Windows系统消息。 基本上,看起来我的应用程序是计算并且长时间没有响应窗口,Visual Studio关闭它并报告可疑的死锁。 我试图做一些研究,找到两个解决方案: 禁用visual studio debbuger中的某些选项以检测死锁。 Dost不适合我,因为它仅用于调试目的。 调用一些DoEvents方法,但它是用于Windows窗体而不是WPF,我使用的是WPF。 还有建议创建单独的线程,但我是完全新的线程,不知道我该怎么做。 有什么建议吗?