1

使用 Task、await 或 Task.WhenAll 总是返回 System.InvalidOperationException 任务尚未完成

我在 Windows 中测试了相同的应用程序,一切正常。

我发现的另一个问题是当我使用时“无法返回 void”:

Task<T> exampleTask = Task<T>(()=> { code; }); 

但是在使用 .Net Framework 的 Windows 中不会发生

我在安装了 Mono 3 并以 .Net Framework 4.5 作为构建目标的 Ubuntu 12 和 OpenSuse 12 中对其进行了测试。

在 Windows 中运行相同的代码。

编码

public async Task<ViewResult> Rss()
{
    var client = new HttpClient();
    var step1 = await client.GetStringAsync("https://github.com/mono/mono/commits/master.atom");
    var step2 = await client.GetStringAsync("https://aspnetwebstack.codeplex.com/project/feeds/rss");
    var step3 = await client.GetStringAsync("https://orchard.codeplex.com/project/feeds/rss");

    ViewBag.MonoActivity = GetItems(step1);
    ViewBag.MVC4Activity= GetItems(step2);
    ViewBag.OrchardActivity= GetItems(step3);

    return View();
}
public IList<SyndicationItem> GetItems(String xml)
{
    var textReader = new StringReader(xml);
    var xmlReader = XmlReader.Create(textReader);
    var feed = SyndicationFeed.Load(xmlReader);
    return feed == null ? null : new List<SyndicationItem>(feed.Items);
}

堆栈跟踪

System.InvalidOperationException
The task has not finished yet

Description: HTTP 500.Error processing request.

Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:

在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000b] 在 /home/abuild/rpmbuild/BUILD/mono-3.0.4/mcs/class/corlib/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:62 在系统.Runtime.CompilerServices.TaskAwaiter.GetResult () [0x00021] in /home/abuild/rpmbuild/BUILD/mono-3.0.4/mcs/class/corlib/System.Runtime.CompilerServices/TaskAwaiter.cs:57 at (wrapper dynamic -method) object.lambda_method (System.Runtime.CompilerServices.Closure,System.Threading.Tasks.Task) 在 System.Threading.Tasks.TaskHelpersExtensions.ThrowIfFaulted (System.Threading.Tasks.Task) 在 System.Web.Mvc.Async System.Web.Mvc.Async.AsyncControllerActionInvoker/<>c_DisplayClass21.b 处的 .TaskAsyncActionDescriptor.EndExecute (System.IAsyncResult )_20 (System.IAsyncResult) 在 System.Web.Mvc.Async.AsyncResultWrapper/WrappedAsyncResult`1.End () <0x00103> 在 System.Web.Mvc.Async.AsyncResultWrapper.End (System.IAsyncResult,object) <0x00073> 在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (System.IAsyncResult) 在 System.Web.Mvc.Async.AsyncControllerActionInvoker/<> c_DisplayClass19 /<> c_DisplayClass1b.b_ 15 () 在 System.Web.Mvc.Async。 AsyncControllerActionInvoker/<>c _DisplayClass31.b__2b ()

4

0 回答 0