如何防止外部提供的资源上的ObjectDisposedException?

时间:2017-10-18 18:46:02

标签: c# task dispose objectdisposedexception

我有以下任务偶尔会运行并利用外部提供的资源。

// start receiving the data
receiving = Task.Run(() =>
{
    string dataCopy = string.Empty;
    string next = string.Empty;

    while (true)
    {
        next = this.buffer.Take(t);

        if(!string.IsNullOrEmpty(next))
        {
            // keep appending the data
            dataCopy += next;

            // check if we've gotten the EOL
            if(dataCopy.Contains(endOfLine))
            {
                // remove the EOL
                dataCopy = this.lib.RemoveString(dataCopy, endOfLine);
                break;
            }
        }

        t.ThrowIfCancellationRequested();
    }

    return dataCopy;
}, t);

我的意图是当另一个线程在CancellationTokenSource上触发触发器时立即取消任务。其中,当任务花费大部分时间坐在buffer(类型为BlockingCollection)时,当.Take抛出时,任务很可能立即取消它的例外。

现在我关注的是......在.Take方法调用之间执行任务的可能性很小,但在<{em} this.lib.RemoveString调用之前执行... lib对象是外部提供的资源,因此将从外部处理(希望在此线程执行完毕后)。

有什么说我的代码赢了ObjectDisposedException一次试图调用RemoveString方法?我如何防范这种情况?

0 个答案:

没有答案