private void OnTaskCompleted() { if (Interlocked.Decrement(ref RemainedParallelTasks) == 0) { try { WaitForRemainedParallelTasks.Set(); } catch (Exception) { } } }
public void Dispose() { GrantRandomAccess(); BTaskWrapper.Run(() => { WriteToStream(FileTypeStreamMap[ENodeType.Hierarchy], HierarchySortedQueue); Writing = false; if (Interlocked.Decrement(ref Remaining) == 0) { try { WaitFor.Set(); } catch (Exception) { } } }); try { WaitFor.WaitOne(); WaitFor.Close(); FileTypeStreamMap[ENodeType.Hierarchy].IOStream.Flush(); FileTypeStreamMap[ENodeType.Metadata].IOStream.Flush(); FileTypeStreamMap[ENodeType.Geometry].IOStream.Flush(); FileTypeStreamMap[ENodeType.Hierarchy].IOStream.Close(); FileTypeStreamMap[ENodeType.Metadata].IOStream.Close(); FileTypeStreamMap[ENodeType.Geometry].IOStream.Close(); } catch (Exception) { } try { WaitForRemainedParallelTasks.Close(); } catch (Exception) { } }