相关疑难解决方法(0)

限制.NET 4.5中的并发任务量

观察者以下功能:

public Task RunInOrderAsync<TTaskSeed>(IEnumerable<TTaskSeed> taskSeedGenerator,
    CreateTaskDelegate<TTaskSeed> createTask,
    OnTaskErrorDelegate<TTaskSeed> onError = null,
    OnTaskSuccessDelegate<TTaskSeed> onSuccess = null) where TTaskSeed : class
{
    Action<Exception, TTaskSeed> onFailed = (exc, taskSeed) =>
    {
        if (onError != null)
        {
            onError(exc, taskSeed);
        }
    };

    Action<Task> onDone = t =>
    {
        var taskSeed = (TTaskSeed)t.AsyncState;
        if (t.Exception != null)
        {
            onFailed(t.Exception, taskSeed);
        }
        else if (onSuccess != null)
        {
            onSuccess(t, taskSeed);
        }
    };

    var enumerator = taskSeedGenerator.GetEnumerator();
    Task task = null;
    while (enumerator.MoveNext())
    {
        if (task == null) …
Run Code Online (Sandbox Code Playgroud)

.net asynchronous

11
推荐指数
2
解决办法
3971
查看次数

处理包装任务的有限并发级别任务调度程序(具有任务优先级)

我很难找到一个任务调度程序,我可以在其上安排优先级任务,但也可以处理"包装"任务.它类似于Task.Run尝试解决的问题,但您无法指定任务调度程序Task.Run.我一直在使用一个QueuedTaskScheduler并行扩展额外的样品,解决了任务优先级要求(也被这个建议).

这是我的例子:

class Program
{
    private static QueuedTaskScheduler queueScheduler = new QueuedTaskScheduler(targetScheduler: TaskScheduler.Default, maxConcurrencyLevel: 1);
    private static TaskScheduler ts_priority1;
    private static TaskScheduler ts_priority2;
    static void Main(string[] args)
    {
        ts_priority1 = queueScheduler.ActivateNewQueue(1);
        ts_priority2 = queueScheduler.ActivateNewQueue(2);

        QueueValue(1, ts_priority2);
        QueueValue(2, ts_priority2);
        QueueValue(3, ts_priority2);
        QueueValue(4, ts_priority1);
        QueueValue(5, ts_priority1);
        QueueValue(6, ts_priority1);

        Console.ReadLine();           
    }

    private static Task QueueTask(Func<Task> f, TaskScheduler ts)
    {
        return Task.Factory.StartNew(f, CancellationToken.None, TaskCreationOptions.HideScheduler | TaskCreationOptions.DenyChildAttach, ts);
    }

    private static Task QueueValue(int i, TaskScheduler …
Run Code Online (Sandbox Code Playgroud)

.net c# priority-queue task-parallel-library async-await

5
推荐指数
1
解决办法
7634
查看次数

SemaphoreSlim 等待优先级

我想知道SemaphoreSlim调用 Await 时是否有类似优先级的事情。

我找不到任何东西,但也许以前有人做过类似的事情。

这个想法是,如果我需要,稍后可以以更高的优先级在信号量上调用等待,并且它将允许等待首先返回。

.net c# asynchronous semaphore async-await

4
推荐指数
1
解决办法
1414
查看次数