c# – 将参数传递给Task.Factory.StartNew
发布时间:2020-12-15 17:46:03 所属栏目:百科 来源:网络整理
导读:给出以下代码: string injectedString = "Read string out of HttpContext";Task.Factory.StartNew(() = { MyClass myClass = new MyClass(); myClass.Method(injectedString); } 这是将字符串传递到任务/线程中的最好方法吗? 我对这种方法的关注是: 垃圾
给出以下代码:
string injectedString = "Read string out of HttpContext"; Task.Factory.StartNew(() => { MyClass myClass = new MyClass(); myClass.Method(injectedString); } 这是将字符串传递到任务/线程中的最好方法吗? 我对这种方法的关注是: >垃圾收集者知道字符串何时变成了 这是一个Asp.Net webservice,如果它是重要的,是一个火,忘记类型的线程,我不等待任何形式的回应. 我的字符串其实是要读出HttpContext,这是为什么我以这种方式注入它的一个原因(线程不能访问调用线程HtppContext) 解决方法
您的lambda将被提升为编译器生成的类. injectString变量将成为该类的一个字段.
因此,当生成的类超出范围(基本上在lambda的最后)时,它将被垃圾回收,GC决定执行集合. 为了回应您的意见: 没有重复.编译器转过来: string injectedString = "Read string out of HttpContext"; Task.Factory.StartNew(() => { MyClass myClass = new MyClass(); myClass.Method(injectedString); } 进入: CompilerGeneratedClass c1 = new CompilerGeneratedClass(); c1.injectedString = "Read string out of HttpContext"; // call delegate here. 还要记住:字符串被扣留在CLR中.即使代码重复了..字符串文字将被扣留在一个池中.您本质上只有一个本地WORD大小的引用重复,指向字符串(仅字符串字面量) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |