Tag: 同步

是否有一个C#等同于Java的CountDownLatch?

是否有一个C#等同于Java的CountDownLatch ?

如何在SIlverlight中实现对WCF服务的同步调用?

有时我需要在Silverlight中调用WCF服务并阻止UI直到它返回。 当然,我可以分三步完成: 设置处理程序和阻止UI 致电服务 一切都完成后取消阻止UI。 但是,我想将DoSomethingSync方法添加到服务客户端类,只需在需要时调用它。 可能吗? 有没有人真正实现过这样的方法? 更新:看起来答案根本不是使用同步调用。 将为异步调用寻找一些易于使用的模式。 看一下这篇文章(摘自评论)。

创建跨进程EventWaitHandle

我有两个Windows应用程序,一个是Windows服务,它创建EventWaitHandle并等待它。 第二个应用程序是一个windows gui,通过调用EventWaitHandle.OpenExisting()打开它,并尝试设置事件。 但我在OpenExisting中遇到exception。 例外是“拒绝访问路径”。 windows服务代码 EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset, “MyEventName”); wh.WaitOne(); Windows GUI代码 try { EventWaitHandle wh = EventWaitHandle.OpenExisting(“MyEventName”); wh.Set(); } catch (Exception ex) { MessageBox.Show(ex.Message); } 我用两个示例控制台应用程序尝试了相同的代码,它工作正常。

使用await时Monitor.Exit上的SynchronizationLockException

我正在创建一段代码,从我们拥有的遗留系统中获取网页。 为了避免过多的查询,我正在缓存获得的URL。 我正在使用Monitor.Enter , Monitor.Exit和双重检查以避免该请求被发出两次,但是当使用Monitor.Exit释放锁时,我收到此exception: System.Threading.SynchronizationLockException was caught HResult=-2146233064 Message=Object synchronization method was called from an unsynchronized block of code. Source=MyApp StackTrace: at MyApp.Data.ExProvider.d__0.MoveNext() in c:\Users\me\Documents\Visual Studio 2013\Projects\MyApp\MyApp\Data\ExProvider.cs:line 56 — End of stack trace from previous location where exception was thrown — at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at MyApp.Data.ExProvider.d__15.MoveNext() in c:\Users\me\Documents\Visual Studio […]

在parallel.foreach范围之外增加计数值

如何在parallel.foreach循环范围之外增加一个整数值? 什么是同步访问并行循环外对象的最轻的方法? var count = 0; Parallel.ForEach(collection, item => { action(item); // increment count?? }

高频时序.NET

我正在寻找创建一个高频回调线程。 基本上我需要一个以常规高频(高达100Hz)间隔执行的function。 我意识到Windows有一个正常的线程执行切片是〜15ms。 我想指定一个可以快于15ms的常规间隔。 这就是我想要完成的。 我有一个需要以一定间隔发送消息的外部设备。 间隔根据情况而变化。 我希望我不需要超过100Hz(10ms)的消息速率。 我当然可以实现一个自旋循环,但是,我希望有一个解决方案不需要浪费太多资源。 提供的问题/答案链接无法解决此问题。 虽然我同意这个问题有几种不同的问题,但实际上并没有一个好的解决方案可以解决问题。 提供的大多数答案都与使用秒表和手动执行计时任务有关,这完全是CPU密集型的。 唯一可行的解​​决方案是使用多媒体定时器,这有一些陷阱,正如Haans所说。 我找到了另一种解决方案,但我将在下面添加。 我不知道此时的陷阱,但我打算做一些测试和研究。 我仍然对有关解决方案的评论感兴趣。 WINAPI通过电话 BOOL WINAPI CreateTimerQueueTimer( _Out_ PHANDLE phNewTimer, _In_opt_ HANDLE TimerQueue, _In_ WAITORTIMERCALLBACK Callback, _In_opt_ PVOID Parameter, _In_ DWORD DueTime, _In_ DWORD Period, _In_ ULONG Flags ); 和 BOOL WINAPI DeleteTimerQueueTimer( _In_opt_ HANDLE TimerQueue, _In_ HANDLE Timer, _In_opt_ HANDLE CompletionEvent […]

使用string作为锁来进行线程同步

当我看到一些遗留的应用程序代码时,我注意到它正在使用字符串对象来进行线程同步。 我正在尝试解决此程序中的一些线程争用问题,并想知道这是否会导致如此奇怪的情况。 有什么想法吗 ? private static string mutex= “ABC”; internal static void Foo(Rpc rpc) { lock (mutex) { //do something } }