Ozz*_*zah 2 c# zip multithreading gzip block
我有一个帖子:
void threadCode(object o)
{
doStuffHere(o); // Blocking call. Sometimes hangs.
}
Run Code Online (Sandbox Code Playgroud)
而我这样称呼它:
Thread t = new Thread(new ThreadStart(delegate()
{
threadCode(o);
}));
t.Start();
StopWatch sw = new StopWatch();
sw.Start();
while (t.IsAlive)
{
Application.DoEvents();
if (sw.EllapsedMilliseconds > myTimeout)
// Somehow kill t even though doStuffHere(o) is blocked (but hung)
}
Run Code Online (Sandbox Code Playgroud)
我正在使用.NET Zip Library并且调用ZipFile.CommitUpdate()大部分时间都可以工作,但有时只是挂起.我不知道为什么,我在文档中看不到任何指示为什么会发生这种情况的内容.一个不超过5-10秒的小文件有时会在那里停留超过5分钟但没有进展.进程资源管理器中的I/O图表显示该进程不是读取或写入,并且没有CPU使用情况.基本上,如果发生这种情况,我想CommitUpdate()在放弃之前杀死并再试一次或两次.
知道如何杀死阻塞调用中的线程吗?
(或者 - 那些有这个zip库经验的人:你知道为什么有时会挂起一些文件吗?我正在修改.docx和.pptx(GZip)文件的内容.这将是一个理想的解决方案. )
如果您要通过使用终止挂起线程Thread.Abort(),请确保您ThreadAbortException在线程代码中处理.正常的模式是:
try {
// do work here
}
catch (ThreadAbortException) {
// allows your thread to gracefully terminate
Thread.ResetAbort();
}
catch {
// regular exception handling
}
Run Code Online (Sandbox Code Playgroud)
如果你不遵循上面的模式,那么你的线程最多会不合时宜地终止.在最坏的情况下,您可能会遇到其他一些问题.
| 归档时间: |
|
| 查看次数: |
6690 次 |
| 最近记录: |