使用 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 ()