草庐IT

多任务loss优化

全部标签

C# 异步任务无限期等待

我正在尝试使用“async”和“await”提供的功能来异步下载网页内容,但我遇到了任务永远等待完成的问题。您能告诉我以下代码片段有什么问题吗?protectedvoidPage_Load(objectsender,EventArgse){varwebsites=newstring[]{"http://www.cnn.com","http://www.foxnews.com"};vartasks=websites.Select(GenerateSomeContent).ToList();//Idon'twanttouse'awaitTasks.WhenAll(tasks)'asInee

具有尾递归优化的 C# 编译?

基于丰富的stackoverflow,我一直在断断续续地回答尾递归优化是否针对特定的c#代码进行。几个问题似乎在谈论对正在发布的较新版本的.net进行优化的推测将应用构建为x64位应用以实现优化在VisualStudio中从调试版本切换到发布版本以实现优化根本没有优化,并且微软社区声称他们不会针对“安全问题”进行尾递归优化(并没有真正理解这一点)它是随机发生的那么从C#4.0(VisualStudio2013/2015)开始,如果可以确保尾递归优化,如何确保它呢? 最佳答案 可以支持尾调用优化的不同级别。JIT实际上负责任何.NET

c# - 数组中的任务——只有最后一个运行

我正在试验任务。为什么这个输出10而不是循环的每个值?publicstaticvoidStartTasks(){Task[]tasks=newTask[10];for(inti=0;iConsole.WriteLine(i));foreach(Tasktaskintasks){task.Start();}} 最佳答案 C#lambda捕获对变量的引用,而不是变量的值。如果您想捕获该值,您需要先在循环内复制它,这会导致捕获获取对局部作用域不变变量的引用。publicstaticvoidStartTasks(){Task[]tasks=

c# - 无需等待即可开始任务

我正在使用asp.netmvc,我想在用户到达站点主页时从数据库中缓存一些有关用户的数据。所以当用户请求主页时,我想调用一个异步方法,它进行数据库调用和缓存数据。任何这样做的例子都会很棒。 最佳答案 publicclassHomeController:Controller{publicActionResultIndex(){ViewData["Message"]="WelcometoASP.NETMVC!";Task.Run(()=>DoSomeAsyncStuff());returnView();}privateasyncvoid

c# - 在基于事件的异步模式上使用任务并行库

我正在编写一个网络应用程序。消息是这样通过传输发送的:Network.SendMessage(newFirstMessage());我可以注册一个事件处理程序,以便在该消息类型到达时调用,如下所示:Network.RegisterMessageHandler(OnFirstMessageReceived);事件被触发:publicvoidOnFirstMessageReceived(EventArgse){}我正在为我的网络应用程序编写一个自定义身份验证过程,它需要大约五条消息才能完成。如果不使用任务并行库,我将不得不在前面的事件处理程序中编写每个过程的下一步代码,如下所示:publi

c# - 编译器是否优化对 const 变量和文字 const 数字的操作?

假设我有一个带字段的类:constdoublemagicalConstant=43;这是代码中的某处:doublerandom=GetRandom();doubleunicornAge=random*magicalConstant*2.0;编译器是否会优化我的代码,使其不会在每次计算unicornAge时都计算magicalConstant*2.0?我知道我可以定义下一个将这个乘法考虑在内的常量。但这在我的代码中看起来更清晰。编译器对其进行优化是有意义的。 最佳答案 (这个问题是thesubjectofmybloginOctober

c# - 任务未处理的异常

我试图了解在任务对象中抛出且从未处理过的异常发生了什么。在MSDN上它说:Ifyoudonotwaitonataskthatpropagatesanexception,oraccessitsExceptionproperty,theexceptionisescalatedaccordingtothe.NETexceptionpolicywhenthetaskisgarbage-collected.所以我不太明白这些异常会以何种方式影响程序流程。我认为这些异常一旦被垃圾收集就应该中断执行。但我无法设计这种行为。在以下代码段中,抛出的异常未显示。//Dosomething...Task.R

c# - C# 中最重要的优化性能最佳实践是什么

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭1年前。Improvethisquestion当我在阅读thistutorial我注意到以下有关在C#中使用结构的性能提示:Unlessyouneedreferencetypesemantics,aclassthatissmallerthan16bytesmaybemoreefficientlyhandledbythesystemasastruct.我在stackoverflow中查找了类似的问题,并在ADO.Net中找到了一些关于性

c# - 将循环转换为任务

我有以下同步代码:foreach(varstepinresult){step.Run();}我试图将其转换为任务,但未能成功。我尝试像这样使用Task.WhenAll转换它(并且我确实将异步附加到方法签名):vartasks=newList();foreach(varstepinresult){tasks.Add(newTask(()=>step.Run()));}awaitTask.WhenAll(tasks);这会立即返回并且不会执行Run()方法。然后我尝试将其转换为以下代码:vartasks=newList();foreach(varstepinresult){tasks.Ad

c# - 我的异步任务总是阻塞 UI

在WPF4.5应用程序中,我不明白为什么当我使用await+任务时UI被阻塞:privateasyncvoidButton_Click(objectsender,RoutedEventArgse){//Task.Delayworksgreat//awaitTask.Delay(5000);doublevalue=awaitJobAsync(25.0);MessageBox.Show("finished:"+value.ToString());}privateasyncTaskJobAsync(doublevalue){for(inti=0;iawaitTask.Delay运行良好,但a