小编Ste*_*oco的帖子

如何在不运行异步方法的情况下对它的任务结果进行排队?

如果我有一个类,其中包含稍后要执行的任务队列,并且我有一个async Task<T>方法,那么如何将该异步方法排入队列而不执行它?

我想“延迟”此任务,并确保调用者看到它稍后运行,就像在方法体中等待它一样。--- 调用者不应该知道我已将任务排队以供稍后使用。

现在,如果我的队列已满,我会构造并返回一个Task<T>未运行的新的,它返回.Result我的私有异步方法:

public async Task<T> ExecuteAsync<T>(T transaction) {
    if (mustDelay) {
        Task<T> task = new Task<T>(t => executeAsync((T) t).Result, transaction);
        enqueue(task);
        return await task;
    }
    return await executeAsync(transaction);
}

private async Task<T> executeAsync<T>(T transaction) {
    await someWork();
    return transaction;
}
Run Code Online (Sandbox Code Playgroud)

当其他任务完成时,我使Start()该任务出队:

dequeuedTask.Start();
Run Code Online (Sandbox Code Playgroud)

这是否确保调用者看到与仅从方法返回等待结果相同的同步?

c# asynchronous task task-queue

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

将 MEF 类库移植到 netstandard 2.0?

我在 Framework 4.7.1 中内置了一个使用 MEF 的小型类库。具体来说,它包括:

ComposablePartCatalog AggregateCatalog CompositionContainer DirectoryCatalog

我可以将其移植到 Netstandard 2.0 库吗?

显然这些类不存在于 API 中。是否有 NuGet 包或我可以迁移到的东西?

一般来说,这些类或替代品会在某个时候出现在 Netstandard 中吗?

.net mef

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

标签 统计

.net ×1

asynchronous ×1

c# ×1

mef ×1

task ×1

task-queue ×1