Table of Contents

Class OperationQueue

Namespace
Punchclock
Assembly
Punchclock.dll

OperationQueue is the core of PunchClock, and represents a scheduler for deferred actions, such as network requests. This scheduler supports scheduling via priorities, as well as serializing requests that access the same data.

The queue allows a fixed number of concurrent in-flight operations at a time. When there are available "slots", items are dispatched as they come in. When the slots are full, the queueing policy starts to apply.

The queue, similar to Akavache's KeyedOperationQueue, also allows keys to be specified to serialize operations - if you have three "foo" items, they will wait in line and only one "foo" can run. However, a "bar" and "baz" item can run at the same time as a "foo" item.

public class OperationQueue : IDisposable
Inheritance
OperationQueue
Implements
Extension Methods
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)
WhenAnyMixin.WhenAny<TSender, TRet, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(TSender?, Expression<Func<TSender, T1>>, Expression<Func<TSender, T2>>, Expression<Func<TSender, T3>>, Expression<Func<TSender, T4>>, Expression<Func<TSender, T5>>, Expression<Func<TSender, T6>>, Expression<Func<TSender, T7>>, Expression<Func<TSender, T8>>, Expression<Func<TSender, T9>>, Expression<Func<TSender, T10>>, Expression<Func<TSender, T11>>, Expression<Func<TSender, T12>>, Func<IObservedChange<TSender, T1>, IObservedChange<TSender, T2>, IObservedChange<TSender, T3>, IObservedChange<TSender, T4>, IObservedChange<TSender, T5>, IObservedChange<TSender, T6>, IObservedChange<TSender, T7>, IObservedChange<TSender, T8>, IObservedChange<TSender, T9>, IObservedChange<TSender, T10>, IObservedChange<TSender, T11>, IObservedChange<TSender, T12>, TRet>)

Constructors

OperationQueue(int)

Initializes a new instance of the OperationQueue class.

public OperationQueue(int maximumConcurrent = 4)

Parameters

maximumConcurrent int

The maximum number of concurrent operations.

Methods

Dispose()

public void Dispose()

Dispose(bool)

Disposes managed resources that are disposable and handles cleanup of unmanaged items.

protected virtual void Dispose(bool isDisposing)

Parameters

isDisposing bool

If we are disposing managed resources.

EnqueueObservableOperation<T>(int, Func<IObservable<T>>)

This method enqueues an action to be run at a later time, according to the scheduling policies (i.e. via priority).

public IObservable<T> EnqueueObservableOperation<T>(int priority, Func<IObservable<T>> asyncCalculationFunc)

Parameters

priority int

Higher priorities run before lower ones.

asyncCalculationFunc Func<IObservable<T>>

The async method to execute when scheduled.

Returns

IObservable<T>

The result of the async calculation.

Type Parameters

T

The type of item for the observable.

EnqueueObservableOperation<T>(int, string, Func<IObservable<T>>)

This method enqueues an action to be run at a later time, according to the scheduling policies (i.e. via priority and key).

public IObservable<T> EnqueueObservableOperation<T>(int priority, string key, Func<IObservable<T>> asyncCalculationFunc)

Parameters

priority int

Higher priorities run before lower ones.

key string

Items with the same key will be run in order.

asyncCalculationFunc Func<IObservable<T>>

The async method to execute when scheduled.

Returns

IObservable<T>

The result of the async calculation.

Type Parameters

T

The type of item for the observable.

EnqueueObservableOperation<T, TDontCare>(int, string, IObservable<TDontCare>, Func<IObservable<T>>)

This method enqueues an action to be run at a later time, according to the scheduling policies (i.e. via priority and key).

public IObservable<T> EnqueueObservableOperation<T, TDontCare>(int priority, string key, IObservable<TDontCare> cancel, Func<IObservable<T>> asyncCalculationFunc)

Parameters

priority int

The priority of operation. Higher priorities run before lower ones.

key string

A key to apply to the operation. Items with the same key will be run in order.

cancel IObservable<TDontCare>

A observable which if signalled, the operation will be cancelled.

asyncCalculationFunc Func<IObservable<T>>

The async method to execute when scheduled.

Returns

IObservable<T>

The result of the async calculation.

Type Parameters

T

The type of item for the observable.

TDontCare

Used to allow any observable type.

PauseQueue()

This method pauses the dispatch queue. Inflight operations will not be canceled, but new ones will not be processed until the queue is resumed.

public IDisposable PauseQueue()

Returns

IDisposable

A Disposable that resumes the queue when disposed.

SetMaximumConcurrent(int)

Sets the maximum level of concurrency for the operation queue.

public void SetMaximumConcurrent(int maximumConcurrent)

Parameters

maximumConcurrent int

The maximum amount of concurrency.

ShutdownQueue()

Shuts down the queue and notifies when all outstanding items have been processed.

public IObservable<Unit> ShutdownQueue()

Returns

IObservable<Unit>

An Observable that will signal when all items are complete.