Sof*_*mes 8 c# multithreading waithandle
根据MSDN文档,ManualResetEvent(或任何EventWaitHandle)上的Set()和Reset()返回一个布尔指示符,无论操作是否成功.
在什么情况下这个调用可以返回false,如果有的话我应该怎么做?
Eri*_*ren 19
我不知道如何回答这个问题,并且查看了很多MSDN示例,忽略了Set返回值,因此它一定不重要或不太可能发生.
但这还不够好.我启动了我的VM,然后打开了Reflector来查看代码.ManualResetEvent没有Set但它继承自EventWaitHandle.这是代码:
public bool Set()
{
bool flag = Win32Native.SetEvent(base.safeWaitHandle);
if (!flag)
{
__Error.WinIOError();
}
return flag;
}
Run Code Online (Sandbox Code Playgroud)
从Kernel32导入SetEvent的位置:
[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
Run Code Online (Sandbox Code Playgroud)
WinIOError()调用只调用我们并不真正关心的GetLastWin32Error.基本上这意味着对于返回false的调用,在Win32本机代码中必须发生一些非常错误的事情.
将这些信息与官方MSDN文档中托管的代码一起忽略返回值这一事实(为什么不呢?如果内核失败,你打算做什么?)如果你想清理你的逻辑,你可以放心地自己忽略它如果你特别迂腐,请点击或获取并记录下来.
| 归档时间: |
|
| 查看次数: |
1541 次 |
| 最近记录: |