-
Notifications
You must be signed in to change notification settings - Fork 4.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Dedup UnboundedChannel and UnboundedPriorityChannel (#101396)
* Dedup UnboundedChannel and UnboundedPriorityChannel We can use generic specialization to avoid duplicating all the code for the different queue types. This should also make it much simpler to add other queue types in the future. * Address PR feedback
- Loading branch information
1 parent
56dcfd7
commit b4e0169
Showing
7 changed files
with
179 additions
and
402 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
...braries/System.Threading.Channels/src/System/Threading/Channels/IUnboundedChannelQueue.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
|
||
using System.Collections.Generic; | ||
using System.Diagnostics.CodeAnalysis; | ||
|
||
namespace System.Threading.Channels | ||
{ | ||
/// <summary>Representation of the queue data structure used by <see cref="UnboundedChannel{T, TQueue}"/>.</summary> | ||
internal interface IUnboundedChannelQueue<T> : IDebugEnumerable<T> | ||
{ | ||
/// <summary>Gets whether the other members are safe to use concurrently with each other and themselves.</summary> | ||
bool IsThreadSafe { get; } | ||
|
||
/// <summary>Enqueues an item into the queue.</summary> | ||
/// <param name="item">The item to enqueue.</param> | ||
void Enqueue(T item); | ||
|
||
/// <summary>Dequeues an item from the queue, if possible.</summary> | ||
/// <param name="item">The dequeued item, or default if the queue was empty.</param> | ||
/// <returns>Whether an item was dequeued.</returns> | ||
bool TryDequeue([MaybeNullWhen(false)] out T item); | ||
|
||
/// <summary>Peeks at the next item from the queue that would be dequeued, if possible.</summary> | ||
/// <param name="item">The peeked item, or default if the queue was empty.</param> | ||
/// <returns>Whether an item was peeked.</returns> | ||
bool TryPeek([MaybeNullWhen(false)] out T item); | ||
|
||
/// <summary>Gets the number of elements in the queue.</summary> | ||
int Count { get; } | ||
|
||
/// <summary>Gets whether the queue is empty.</summary> | ||
bool IsEmpty { get; } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.