【发布时间】:2016-05-20 19:03:46
【问题描述】:
我有一个问题,我归结为这段代码 sn-p:
var task=new Task<int>(()=>5);
task.Wait();
问题是task.Wait() 永远不会返回。我过去编写的代码运行良好。
到目前为止我已经尝试过:
- 将整个事情包装在一个异步函数中并在其上调用
Wait(相同的行为) - 这最初是一个包含在
WaitAll中的承诺列表,并在停止时调用Wait - 尝试调用
Task.Start,但收到一个异常,指出Task.Start不适用于承诺风格的任务
那么,有什么想法吗?
编辑:
导致问题的完整代码 sn-p:
static void EfTest()
{
_start = DateTime.Now;
var task = CreateEfTask();
var efTasks= Enumerable.Range(0, 1).Select(i => CreateEfTask()).ToList();
var t= Task.WhenAll(efTasks);
t.Wait();
var results = t.Result;
}
private static Task<Result> CreateEfTask()
{
return new Task<List<PricingRule>>(
() => new global::Entities
.Entities()
.PricingRules
.Where(pr => pr.IsEnabled).ToList())
.ContinueWith(t => new Result
{
PricingRules = t.Result,
TimeSpan = DateTime.Now.Subtract(_start)
});
}
将Task.Start 放在t.Wait 之前会引发错误,指出您不能在promise stile Task 上使用start。
【问题讨论】:
-
如果我执行 task.Start();它运行,但在我点击等待时它已经完成。所以,然后我的按预期运行 - 我没有收到错误
-
"尝试调用 Task.Start 但收到一个异常,指出 Task.Start 不适用于 promise 样式的任务" 我们可以查看具体的异常吗?