【发布时间】:2014-04-10 06:27:38
【问题描述】:
我们已经实现了一个用于将文件上传到 box.net 的队列。 所有文件均已成功上传。但是,我在一周内收到以下异常 1 或 2 次。我找不到导致此异常的任何原因。
异常消息:
线程被中止。
异常来源:
mscorlib
异常堆栈跟踪:
在 System.Threading.Monitor.ObjWait(Boolean exitContext, Int32 millisecondsTimeout, Object obj) 在 System.Threading.Monitor.Wait(对象 obj,Int32 毫秒超时,布尔 exitContext) 在 System.Threading.Monitor.Wait(对象 obj) 在 C:\Project\BackupProjects\BoxNetFileUpload\Box.netAPIWebApp\Source\Service\BoxService.cs:line 90 中的 Box.netAPIWebApp.Service.BoxService.monitorOnUploadQueue() 处
有人可以帮忙吗?
private static readonly BoxService instance = new BoxService();
private Queue<FileCabinetUploadHistory> uploadQueue = new Queue<FileCabinetUploadHistory>();
private BoxService()
{
Thread monitorThread = new Thread(new ThreadStart(monitorOnUploadQueue));
monitorThread.Start();
}
private FileCabinetUploadHistory RemoveFromUploadQueue()
{
lock (uploadQueue)
{
return uploadQueue.Dequeue();
}
}
private void monitorOnUploadQueue()
{
FileCabinetUploadHistory fileCabinetUploadHistory = null;
try
{
while (true)
{
if (uploadQueue.Count < 1)
{
lock (uploadQueue)
{
Monitor.Wait(uploadQueue);
}
}
fileCabinetUploadHistory = uploadQueue.Peek();
if (fileCabinetUploadHistory != null)
{
StartFileUpload(fileCabinetUploadHistory);
}
}
}
catch (Exception exception)
{
log.Error("Error:--> Class name: BoxService, Method name: monitorOnUploadQueue() \n", exception);
}
}
public void AddToUploadQueue(FileCabinetUploadHistory fileCabinetUploadHistory)
{
lock (uploadQueue)
{
if (!uploadQueue.Contains(fileCabinetUploadHistory))
{
uploadQueue.Enqueue(fileCabinetUploadHistory);
Monitor.Pulse(uploadQueue);
}
}
}
【问题讨论】:
-
能否贴出引发此异常的源代码?
-
你如何使用
BoxService.monitorOnUploadQueue? -
@user743414 从引发异常的 BoxService 类发布代码。
-
当您收到此错误时,您是否知道队列中有多少项?何时以及多久调用一次 RemoveFromUploadQueue?
-
队列中没有项目