草庐IT

task-switching

全部标签

c# - 如何在子类的工厂方法中避免 switch-case

假设我们有一组类(卡片,为了它),我们需要根据一些标识符来实例化它们。工厂方法看起来像这样:publicCardGetCard(intcardNumber){switch(cardNumber){case13:returnnewKing();case12:returnnewQueen();case11:returnnewJack();}//...}我想要的是避免这个开关。为什么?也许我想在功能中重用这个比较。我想出的是这样的:privateDictionarycardTypes={{13,typeof(King)},{12,typeof(Queen)},{11,typeof(Jack)

c# - 在 Task.Run 中使用 async/await 在 WinForms 上访问 UI 控件

我在具有一个按钮和一个标签的WinForms应用程序中有以下代码:usingSystem;usingSystem.IO;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateasyncvoidbutton1_Click(objectsender,EventArgse){awaitRun();}privateasyncTas

c# - 为什么 switch for enum 接受隐式转换为 0 但不接受任何其他整数?

有一个:enumSomeEnum{A=0,B=1,C=2}现在编译器允许我写:SomeEnumx=SomeEnum.A;switch(x){case0://0被认为是SomeItems.A。但我不会写:SomeEnumx=SomeEnum.A;switch(x){case0:break;case1://为什么只有0存在隐式转换? 最佳答案 来自ECMA-334(C#LanguageSpecification)13.1.3ImplicitenumerationconversionsAnimplicitenumerationconver

c# "task method"也可以是 "async"方法吗?

我正在尝试掌握新的异步CTP内容,我可能在这里感到困惑......我可以有这个“任务方法”,没有问题:publicstaticTaskLongTaskAAsync(){returnTask.Run(()=>{return("AAA");});}但是如果我需要任务执行另一个任务,我可以将其标记为“async”并使用“await”吗?我试过这个:publicasyncstaticTaskLongTaskAAsync(){awaitTask.Delay(2000);returnTask.Run(()=>{return("AAA");});}但随后莫名其妙地得到了这个编译器错误:因为这是一个异

c# - 使用 Action 字典而不是 switch 语句

我正在审查我的一些旧代码(有一些空闲时间),我注意到一个相当冗长的switch语句。由于获得了新知识,我将其重构为以下形式:privateDictionarycreateView{get{returnnewDictionary(){{"Standard",CreateStudySummaryView},{"ByGroup",CreateStudySummaryByGroupView},{"ByGroup/Time",CreateViewGroupByHour}};}}您认为这是一种良好的做法,还是仅仅是一种多余且不必要的情况?我热衷于确保我学习的新技术不是为了聪明而聪明,而是它们实际上

c# - Task.Factory.StartNew 与异步方法

这可能是一个微不足道的问题,但它可能有助于我的基本理解。以下两个实现之间有什么重要区别吗?Task.Factory.StartNew:publicTaskReadAllTextAsync(stringpath){returnTask.Factory.StartNew(()=>File.ReadAllText(path));}StreamReader上的异步方法:publicasyncTaskReadAllTextAsync(stringpath){using(varstream=File.OpenRead(path))using(varreader=newStreamReader(st

c# - "switch"语句评估线程安全吗?

考虑以下示例代码:classMyClass{publiclongx;publicvoidDoWork(){switch(x){case0xFF00000000L://dowhatever...break;case0xFFL://dowhatever...break;default://notifythatsomethinggoingwrongthrownewException();}}}忘记代码片段的无用性吧:我怀疑的是switch语句的行为。假设x字段只能有两个值:0xFF00000000L或0xFFL。上面的开关不应该属于“默认”选项。现在假设一个线程正在执行“x”等于0xFFL的

c# - await Task.Factory.StartNew(() => vs Task.Start; await Task;

这两种使用await的形式在功能上有什么区别吗?stringx=awaitTask.Factory.StartNew(()=>GetAnimal("feline"));TaskmyTask=newTask(()=>GetAnimal("feline"));myTask.Start();stringz=awaitmyTask;具体来说,1.中每个操作是按什么顺序调用的?是调用StartNew然后调用await,还是在1.中先调用await? 最佳答案 当您使用async和await编写代码时,您应该尽可能使用Task.Run。Task

c# - Task.WaitAll 方法与 Parallel.Invoke 方法

我有示例代码来比较并行方法和任务方法的处理时间。本实验的目的是了解它们的工作原理。所以我的问题是:为什么Parallel比Task工作得更快?我的结果是否意味着我应该使用Parallel而不是Task?我应该在哪里使用Task和Parallel?与并行相比,使用任务有什么好处?Task是否只是ThreadPool.QueueUserWorkItem方法的包装?publicTaskSomeLongOperation(){returnTask.Delay(3000);}staticvoidMain(string[]args){Programp=newProgram();Listtasks=

c# - 为什么调用不明确? 'Task.Run(Action)' 和 'Task.Run(Func<Task>)'

考虑以下代码:publicvoidCacheData(){Task.Run((Action)CacheExternalData);Task.Run(()=>CacheExternalData());Task.Run(CacheExternalDataTask);Task.Run(CacheExternalData);}publicTaskCacheExternalDataTask(){//LongrunningcodereturnTask.FromResult("Data");}publicvoidCacheExternalData(){//Longrunningcode}为什么Tas