本文整理汇总了C#中ThreadState.WriteDocument方法的典型用法代码示例。如果您正苦于以下问题:C# ThreadState.WriteDocument方法的具体用法?C# ThreadState.WriteDocument怎么用?C# ThreadState.WriteDocument使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ThreadState
的用法示例。
在下文中一共展示了ThreadState.WriteDocument方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FinishDocument
/// <summary>Does the synchronized work to finish/flush the
/// inverted document.
/// </summary>
private void FinishDocument(ThreadState state)
{
lock (this)
{
if (abortCount > 0)
{
// Forcefully idle this threadstate -- its state will
// be reset by abort()
state.isIdle = true;
System.Threading.Monitor.PulseAll(this);
return ;
}
// Now write the indexed document to the real files.
if (nextWriteDocID == state.docID)
{
// It's my turn, so write everything now:
nextWriteDocID++;
state.WriteDocument();
state.isIdle = true;
System.Threading.Monitor.PulseAll(this);
// If any states were waiting on me, sweep through and
// flush those that are enabled by my write.
if (numWaiting > 0)
{
bool any = true;
while (any)
{
any = false;
for (int i = 0; i < numWaiting; )
{
ThreadState s = waitingThreadStates[i];
if (s.docID == nextWriteDocID)
{
s.WriteDocument();
s.isIdle = true;
nextWriteDocID++;
any = true;
if (numWaiting > i + 1)
// Swap in the last waiting state to fill in
// the hole we just created. It's important
// to do this as-we-go and not at the end of
// the loop, because if we hit an aborting
// exception in one of the s.writeDocument
// calls (above), it leaves this array in an
// inconsistent state:
waitingThreadStates[i] = waitingThreadStates[numWaiting - 1];
numWaiting--;
}
else
{
System.Diagnostics.Debug.Assert(!s.isIdle);
i++;
}
}
}
}
}
else
{
// Another thread got a docID before me, but, it
// hasn't finished its processing. So add myself to
// the line but don't hold up this thread.
waitingThreadStates[numWaiting++] = state;
}
}
}