草庐IT

c# - 使用 Task.Run 调用异步方法似乎是错误的?

我最近看到这段代码是由我们为我们工作的承包商编写的。它要么非常聪明,要么非常愚蠢(我认为是后者,但我想要第二个意见)。我在asyncawait上的速度不是很快。基本上它是这样工作的:publicboolSend(TemplatedMessageDtomessage){returnTask.Run(()=>SendAsync(message)).GetAwaiter().GetResult();}publicasyncTaskSendAsync(TemplatedMessageDtomessage){//codedoingstuffvarresults=await_externalres

c# - Thread.IsAlive 和 Thread.ThreadState==ThreadState.Running

我正在使用if(Thread.IsAlive)检查线程的状况。该线程中正在运行一个表单。有时在执行过程中,即使窗体保持打开状态,对Thread.IsAlive的调用似乎评估为false。我想用if(Thread.ThreadState==ThreadState.Running)执行相同的检查。这是正确的做法吗?如果不是,可能的解决方法是什么? 最佳答案 msdnThread.IsAlive属性如果此线程已启动且未正常终止或中止,则为true;否则为假。msdn线程.ThreadState运行线程已经启动,没有阻塞,也没有挂起的Thr

c# - NUnit 3 : Forbid tests to run in parallel

我安装了最新的NUnit(3.2.0),并且所有测试都并行运行。它可能看起来像是理想的行为,但我并没有要求它,实际上它破坏了我的一些测试。我在[OneTimeSetUp]中进行了一些依赖于线程的初始化,似乎我无法做任何事情来强制NUnit按顺序运行我的测试。我读过documentation它指出默认情况下测试不是并行运行的,但实际上它们是!此外,我尝试添加以下属性:[assembly:Parallelizable(ParallelScope.None)]—没有成功。有人知道如何改变这种行为吗?附言我使用ReSharper运行它,但也尝试使用MSVS插件。UPD:我正在使用MVVMLig

C# 不同的转换方式——(T)obj vs obj as T

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:castingvsusingthe'as'keywordintheCLR我见过两种不同的C#转换方式。例如:MyObjfoo=(MyObj)bar;//thisiswhatIseemostofthetimesMyObjfoo=barasMyObj;//Idoseethissometimes那么,基本区别是什么?style1和style2转换的正确名称是什么?我如何决定何时使用什么?是否存在任何重大性能问题?关于这个主题,还有什么我应该知道的吗?非常感谢您对此的调查:)

c# - 任务不包含 Run 方法的定义

我第一次尝试在我的代码中实现多线程。当我尝试使用TaskT=Task.Run(()=>{});VisualStudio仍然在Run()下划线声明“任务不包含定义‘运行’”我正在使用System.Threading.Tasks;互联网对这个问题一无所知 最佳答案 .NET4.0没有Task.Run方法。相反,您可以使用:任务T=Task.Factory.StartNew(()=>{});您可以了解更多关于here的信息 关于c#-任务不包含Run方法的定义,我们在StackOverflow

c# - Entity Framework new transaction is not allowed because there are other threads running in the session,多线程保存

我正在尝试将多线程进程的日志保存在数据库中,但出现以下错误:不允许新事务,因为session中还有其他线程在运行。在每个胎面我都有这个功能:internalboolWriteTrace(IResultresult,stringmessage,bytetype){SPC_SENDING_TRACEtrace=newSPC_SENDING_TRACE(message,Parent.currentLine.CD_LINE,type,Parent.currentUser.FULLNAME,Parent.guid);Context.SPC_SENDING_TRACE.AddObject(trac

c# - C# "as"关键字是否有比简单转换更多的内容?

我正在处理JoshSmith'sCommandSinkcode显然不了解C#中的“as”关键字。我不明白他为什么要写这行:IsValid=_fe!=null||_fce!=null;因为他只需要写:IsValid=depObj!=null;因为永远不会出现_fe为null而_fce不为null的情况,反之亦然,对吧?还是我遗漏了有关“as”如何转换变量的信息?classCommonElement{readonlyFrameworkElement_fe;readonlyFrameworkContentElement_fce;publicreadonlyboolIsValid;public

c# - 如何将字符串转换为 DateTime as UTC 就这么简单

假设我有这个字符串:如何将它转换为具有UTC时间的DateTimeOffset对象-意味着-00:00作为时区-即使我在特定时区的机器上运行它?假设字符串:“2012-10-08T04:50:12.0000000”Convert.ToDateTime("2012-10-08T04:50:12.0000000"+"Z");-->日期时间d={10/8/20126:50:12AM}我希望它成为日期时间d={10/8/20124:50:12AM}好像它会理解我想要的日期一样简单(顺便说一句-我的机器在时区+02:00) 最佳答案 使用Da

c# - CA2104 警告 : Is there any way to mark a class as `Immutable` to suppress it?

考虑下面的代码,它触发了CA2104:Donotdeclarereadonlymutablereferencetypes.publicclassTest{//ThisprovokesCA2104:"Donotdeclarereadonlymutablereferencetypes".protectedreadonlyImmutableClassImmutableMember;}publicclassImmutableClass{}有谁知道以一种可以抑制警告CA2104的方式将类标记为不可变的方法吗?我尝试用[ImmutableObject(true)]装饰MutableClass没有成

c# - 使用 Task.Run() 写入控制台失败

我的一位同事发现我们的代码存在问题,花了一段时间才查明到底发生了什么,但这个简单的例子可以最好地证明这一点://FailsclassProgram{staticvoidMain(string[]args){Task.Run(()=>Console.WriteLine("HelloWorld"));Console.ReadKey();}}//WorksfineclassProgram{staticvoidMain(string[]args){Console.Write(String.Empty);Task.Run(()=>Console.WriteLine("HelloWorld"));