如果我有一个类,其中包含稍后要执行的任务队列,并且我有一个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)
这是否确保调用者看到与仅从方法返回等待结果相同的同步?
我在 Framework 4.7.1 中内置了一个使用 MEF 的小型类库。具体来说,它包括:
ComposablePartCatalog
AggregateCatalog
CompositionContainer
DirectoryCatalog
我可以将其移植到 Netstandard 2.0 库吗?
显然这些类不存在于 API 中。是否有 NuGet 包或我可以迁移到的东西?
一般来说,这些类或替代品会在某个时候出现在 Netstandard 中吗?