我正在寻找一个执行上下文,它可以async/await
通过以下方式同时与 TPL 很好地配合使用(预期行为):
async Task<string> ReadContext(string slot)
{
// Perform some async code
...
return Context.Read(slot);
}
(1) 玩得很好async/await
Context.Store("slot", "value");
await DoSomeAsync();
Assert.AreEqual("value", Context.Read("slot"));
Context.Store("slot", "value");
var value = await ReadContext("slot");
Assert.AreEqual("value", value);
(2) 玩得很好Task.Run()
Context.Store("slot", "value");
var task = Task.Run(() => ReadContext("slot"));
Assert.IsNull(task.Result);
(3) 与期待已久的人打得很好Task
Context.Store("slot", "value");
var value = await Task.Run(() => ReadContext("slot"));
Assert.AreEqual("value", value);
(3)不是必需的,但会很好。我CallContext
现在使用,但它在(2)处失败,因为即使在手动运行的任务中也可以访问存储在其中的值,即使在那些运行时使用Task.Factory.StartNew(..., LongRunning)
它应该强制在单独的线程上运行任务。
有没有办法做到这一点?