草庐IT

延迟任务

全部标签

c# - C# 中延迟执行和懒惰求值的区别

能否请您告诉我C#中延迟执行和惰性求值之间的确切差异是什么?这两个是同义词。有人可以举例说明区别吗? 最佳答案 实际上,它们的意思本质上是一样的。但是,最好使用术语延迟。懒惰是指“除非万不得已才去做。”延迟意味着“在调用者实际使用它之前不计算结果。”在实践中,当调用者决定使用评估结果时(即开始遍历IEnumerable),这正是需要完成“工作”的时间点(例如向数据库)。术语延迟更具体/描述了实际发生的事情。当我说我懒惰时,意思是我避免做不必要的工作;真正的含义是模棱两可的。然而,当我说执行/评估是延迟时,这实质上意味着我根本没有给你

c# - .NET 程序集的延迟签名有什么意义?

我注意到,在我使用AssemblyDelaySignAttribute指示程序集正在开发中并且现在不需要签名之后,我将不得不使用sn-Vrfoolib.dll以注册强名称验证,以便为该程序集关闭。做这个圈子有什么意义?为什么不在程序集完全完成之前不对其进行签名?这不是更麻烦吗? 最佳答案 几个原因...不能将没有强名称的程序集添加到GAC与#1相关,不在GAC中的组件不会从NGEN中获益太多在使用部分名称进行程序集探测和加载时,强命名程序集表现出不同的行为。没有强名称的程序集不能被强名称程序集引用因此,在严格控制签名过程的组织中,能

c# - C#中的延迟执行

如何在C#中实现我自己的延迟执行机制?例如我有:stringx=DoFoo();是否可以施展魔法,让DoFoo在我“使用”x之前不执行? 最佳答案 您可以使用lambdas/委托(delegate):Funcdoit=()=>DoFoo();//-or-Funcdoit=DoFoo;稍后您可以调用doit就像一个方法:stringx=doit();我想你能得到的最接近的是这样的:Lazyx=DoFoo;stringy=x;//"use"x定义为Lazy类似于此(未经测试):publicclassLazy{privatereadonl

c# - 任务未处理的异常

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

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

c# - 如何从异步任务返回结果?

我想从异步任务返回一个字符串结果。System.Threading.Tasks.Task.Run(async()=>awaitaudatex.UploadInvoice(assessment,fileName));publicasyncTaskUploadInvoice(stringassessment,stringfileName){//Dostuffreturnstring;}异步编程让我很困惑,谁能解释一下? 最佳答案 异步编程可能需要一段时间才能让您理解,所以我会发布对我有用的内容,以防对其他人有所帮助。如果您想将业务逻辑与

c# - c#中For循环的时间延迟

我如何在一定的旋转后在循环中使用时间延迟?假设:for(inti=0;i我希望每8次旋转后延迟1秒。 最佳答案 有很多方法可以做到这一点:方法一:极其糟糕:忙等待:DateTimetimeToStartUpAgain=whatever;while(DateTime.Now这是一件可怕的事情;操作系统会假设你正在做有用的工作,并会分配一个CPU来做除了旋转之外的任何事情。永远不要这样做,除非您知道自旋只会持续几微秒。基本上,当您这样做时,您已经雇用了某人为您看表;那不经济。方法二:非常糟糕:休眠线程。让线程休眠也是一件可怕的事情,但没

c# - 当由一组信用下的计划任务启动的进程在另一组信用下运行另一个程序时,Windows 是否有限制

所以我有一个简单的例子,我有一个应用程序A,它有一些硬编码的用户X的凭据,一个本地管理员,然后它使用硬编码的绝对路径使用这些凭据启动应用程序B。A和B以及dotnet控制台应用程序,但是它们不与控制台交互,只是将信息写入文件。当我以交互方式运行A时(在我的Creds下,通过双击或通过CMD.exe或交互式PowerShellsession,它运行良好。成功调用B当我通过计划任务运行它时,A被creds控制,并使用用户X调用B,Process.Start(mystartinfo)的错误代码是-1073741502或十六进制的0xC0000142,表示“应用程序未能正确初始化”但是,如果我

c# - Xamarin:不传播任务引发的异常

我在Xamarin中有以下代码(在ios中测试):privatestaticasyncTaskTaskWithException(){returnawaitTask.Factory.StartNew(()=>{thrownewException("Booo!");return"";});}publicstaticasyncTaskRunTask(){try{returnawaitTaskWithException();}catch(Exceptionex){Console.WriteLine(ex.ToString());throw;}}调用它作为awaitRunTask(),确实会从