C# Threading

Begin/EndInvoke:

Use AsyncCallback EndInvoke to get Result:

public IAsyncResult BeginInvoke(parm ...,AsyncCallback cb, object state);

IAsyncResult iar= test.BeginInvoke(
                10,  //参数
                new AsyncCallback((ar) =>
                {            string message = ar.AsyncState;
                    int result = ((TestMethode((AsyncResult)ar).AsyncDelegate).EndInvoke(ar);
                    tb.Text = result.ToString();
                }),  //callback
                "test"    //state
);
//Use EndInvoke to wait
//阻塞
int result = test.EndInvoke(ar);

ThreadPool:

RegisterWaitForSingleObject: trigger callback if waitObject has signal OR time out:

public static RegisteredWaitHandle RegisterWaitForSingleObject(
    WaitHandle waitObject,
    WaitOrTimerCallback callBack,
    Object state,
    int millisecondsTimeOutInterval,
    bool executeOnlyOnce
)
static AutoResetEvent wait=new AutoResetEvent(false);
ThreadPool.RegisterWaitForSingleObject(wait, new WaitOrTimerCallback(test11), state,5000, false);

//use wait.Set() to run the callback immediately
//Otherweise use new AutoResetEvent(true)
wait.Set();

Task:

CancellationTokenSource tokenSource = new CancellationTokenSource();
  Task<string> task = new Task<string>((obj) =>
            {
                while (true)
                {
                    if (ck.IsCancellationRequested)
                    {
                        // Clean up here, then...
                        break;
                    }
                }
                return "Done";
            }, tokenSource.Token);

            task.Start();

//等待任务的完成执行过程。
task.Wait();

//获得任务的执行结果
Console.WriteLine("任务执行结果:{0}", task.Result.ToString());

//cancel the task
tokenSource.Cancel();

//User Task.Factory
Task.Factory.StartNew(() => { ProcessFiles(); });      

Child-Task:

var parent = Task.Factory.StartNew(() =>
{
var nonChildTask = Task.Factory.StartNew(
    () => Console.WriteLine("I‘m not a child task."));

var childTask = Task.Factory.StartNew(
    () => Console.WriteLine("I‘m a child task."),
    TaskCreationOptions.AttachedToParent);
}); 

OR:

Task parent=new Task(()=>
{
    DoStep1();
});

Task task2 = parent.ContinueWith((PrevTask) =>
{
    DoStep2();
});
parent.Start();

Cancel Task

1.

token.ThrowIfCancellationRequested();

C# Threading

时间: 2024-11-06 07:31:46

C# Threading的相关文章

python核心编程笔记----threading

一个进程中的各个线程之间共享同一片数据空间,所以线程之间可以比进程之间更方便地共享数据以及相互通讯. 1.全局解释器锁(GIL) Python 解释器中可以"运行"多个线程,但在任意时刻,只有一个线程在解释器中运行.在多线程环境中,Python 虚拟机(解释器)按以下方式执行:1).设置 GIL2).切换到一个线程去运行3).运行: a. 指定数量的字节码指令,或者 b. 线程主动让出控制(可以调用 time.sleep(0))4).把线程设置为睡眠状态5).解锁 GIL6).再次重复

threading

threading.Thread Thread 是threading模块中最重要的类之一,可以使用它来创建线程.有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法:另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入.下面分别举例说明.先来看看通过继承threading.Thread类来创建线程的例子: Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

threading模块

threading — Higher-level threading interface¶ Source code: Lib/threading.py This module constructs higher-level threading interfaces on top of the  lower level thread module. See also the mutex and Queue modules. The dummy_threading module is provide

System.Threading

线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread currThread = Thread.CurrentThread; //获取正在承载当前线程的应用程序 AppDomain ad = Thread.GetDomain(); //获取当前操作线程所处的上下文 System.Runtime.Remoting.Contexts.Context ct

vs2013c#测试using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1_CXY { class Program { stati

首先安装Unit Test Generator.方法为:工具->扩展和更新->联机->搜索“图标为装有蓝色液体的小试管.Unit Test Generator”, 编写代码,生成一个新的类,编写构造函数 与 add()函数.代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Co

python threading模块

# -*-coding:utf-8 -*- __author__ = 'magicpwn' import threading import time import Queue def worker():     print threading.current_thread().getName() def worker2():     for i in range(0,1000):         print i         time.sleep(1)          threads = [

Python多线程的threading Event

Python threading模块提供Event对象用于线程间通信.它提供了一组.拆除.等待用于线程间通信的其他方法. event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号.Python 通过threading.Event()产生一个event对象.event对象维护一个内部标志(标志初始值为False),通过set()将其置为True.wait(timeout)则用于堵塞线程直至Flag被set(或者超时,可选的),isSet()用于查询标志位是否为True,Clear()则用

(译)Asynchronous programming and Threading in C# (.NET 4.5)

原文地址:http://www.codeproject.com/Articles/996857/Asynchronous-programming-and-Threading-in-Csharp-N 介绍: Asynchronous programming and threading is very important feature for concurrent or parallel programming. Asynchronous programming may or may not us

threading 模块

threading模块里面主要是对一些线程的操作对象化了,创建了Thread class.使用线程有两种模式,一种是创建线程要执行的 函数,把这个函数传递进Thread对象里,让它来执行:另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里. 1 __author__ = 'Zechary' 2 import string, threading, time 3 def thread_main(a): 4 global count, mutex 5 t

Python多线程(threading)学习总结

注:此文除了例子和使用心得是自己写的,很多都是Python核心编程中的原文.原文文风应该能看出来,就不每个地方单独表明出处了. 线程(有时被称为轻量级进程)跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享相同的运行环境.它们可以想像成是在主进程或"主线程"中并行运行的"迷你进程". 线程有开始,顺序执行和结束三部分.它有一个自己的指令指针,记录自己运行到什么地方.线程的运行可能被抢占(中断),或暂时的被挂起(也叫睡眠),让其它的线程运行,这叫做让步.一个