草庐IT

task_struct

全部标签

c# - .NET Task 实例能否在运行期间超出范围?

如果我在方法中有以下代码块(使用.NET4和任务并行库):vartask=newTask(()=>DoSomethingLongRunning());task.Start();并且方法返回,该任务会超出范围并被垃圾收集,还是会运行完成?我没有注意到GCing有任何问题,但想确保我没有为GC的竞争条件做好准备。 最佳答案 更新:在我回答了这个问题之后(很久以前!),我发现任务总是运行到完成是不正确的-有一个小的,比方说“角落”情况,任务可能无法完成。原因是这样的:正如我之前回答的那样,任务本质上是线程;但它们是后台线程。当所有前台线程

c# - Task.Factory.StartNew 与 Task.Factory.FromAsync

假设我们有一个I/O绑定(bind)方法(例如进行数据库调用的方法)。此方法既可以同步运行,也可以异步运行。也就是说,同步:IOMethod()异步:BeginIOMethod()EndIOMethod()那么当我们以如下所示的不同方式执行该方法时,在资源利用率方面的性能差异是什么?vartask=Task.Factory.StartNew(()=>{IOMethod();});task.Wait();vartask=Task.Factory.FromAsync(BeginIOMethod,EndIOMethod,...);task.Wait(); 最佳答案

c# - Task.Factory.StartNew 与 Task.Factory.FromAsync

假设我们有一个I/O绑定(bind)方法(例如进行数据库调用的方法)。此方法既可以同步运行,也可以异步运行。也就是说,同步:IOMethod()异步:BeginIOMethod()EndIOMethod()那么当我们以如下所示的不同方式执行该方法时,在资源利用率方面的性能差异是什么?vartask=Task.Factory.StartNew(()=>{IOMethod();});task.Wait();vartask=Task.Factory.FromAsync(BeginIOMethod,EndIOMethod,...);task.Wait(); 最佳答案

c# - 无法声明接口(interface) "async Task<myObject> MyMethod(Object myObj); "

这个问题在这里已经有了答案:Error:"Cannotuse'async'onmethodswithoutbodies".Howtoforceasyncchildoverrides?(2个答案)关闭去年。我无法声明interfaceIMyInterface{asyncTaskMyMethod(ObjectmyObj);}编译器告诉我:修饰符async对此项目无效async修饰符只能用于有主体的方法这是应该实现的东西,还是async&await的性质禁止这种情况发生?

c# - 无法声明接口(interface) "async Task<myObject> MyMethod(Object myObj); "

这个问题在这里已经有了答案:Error:"Cannotuse'async'onmethodswithoutbodies".Howtoforceasyncchildoverrides?(2个答案)关闭去年。我无法声明interfaceIMyInterface{asyncTaskMyMethod(ObjectmyObj);}编译器告诉我:修饰符async对此项目无效async修饰符只能用于有主体的方法这是应该实现的东西,还是async&await的性质禁止这种情况发生?

c# - 通用约束,其中 T : struct and where T : class

我想区分以下情况:普通值类型(例如int)可空值类型(例如int?)引用类型(例如string)-可选,我不关心它是否映射到上面的(1)或(2)我想出了以下代码,它适用于情况(1)和(2):staticvoidFoo(Ta)whereT:struct{}//1staticvoidFoo(T?a)whereT:struct{}//2但是,如果我尝试像这样检测案例(3),它不会编译:staticvoidFoo(Ta)whereT:class{}//3错误消息是类型“X”已经用相同的参数类型定义了一个名为“Foo”的成员。好吧,不知何故,我无法区分whereT:struct和whereT:c

c# - 通用约束,其中 T : struct and where T : class

我想区分以下情况:普通值类型(例如int)可空值类型(例如int?)引用类型(例如string)-可选,我不关心它是否映射到上面的(1)或(2)我想出了以下代码,它适用于情况(1)和(2):staticvoidFoo(Ta)whereT:struct{}//1staticvoidFoo(T?a)whereT:struct{}//2但是,如果我尝试像这样检测案例(3),它不会编译:staticvoidFoo(Ta)whereT:class{}//3错误消息是类型“X”已经用相同的参数类型定义了一个名为“Foo”的成员。好吧,不知何故,我无法区分whereT:struct和whereT:c

c# - Task<> 不包含 'GetAwaiter' 的定义

客户端iGameChannel=newChannelFactory(newBasicHttpBinding(BasicHttpSecurityMode.None),newEndpointAddress(newUri("http://localhost:58597/Game.svc"))).CreateChannel();publicTaskClient(SerializableDynamicObjectPacket){returnTask.Factory.FromAsync(Channel.BeginConnection,Channel.EndConnection,Packet,nul

c# - Task<> 不包含 'GetAwaiter' 的定义

客户端iGameChannel=newChannelFactory(newBasicHttpBinding(BasicHttpSecurityMode.None),newEndpointAddress(newUri("http://localhost:58597/Game.svc"))).CreateChannel();publicTaskClient(SerializableDynamicObjectPacket){returnTask.Factory.FromAsync(Channel.BeginConnection,Channel.EndConnection,Packet,nul

C# struct new StructType() 与 default(StructType)

假设我有一个结构publicstructFoo{...}有什么区别吗Foofoo=newFoo();和Foofoo=default(Foo);? 最佳答案 您可能想知道,如果它们完全相同,为什么有两种方法可以做同样的事情。它们并不完全相同,因为每个引用类型或值类型都保证有一个默认值但不是每个引用类型都保证有一个无参数构造函数:staticTMakeDefault(){returndefault(T);//legal//returnnewT();//illegal} 关于C#structn