using System;
using System.Threading;
namespace ThreadStartSampleCS
{
class Program
{
static void Main()
{
Thread newThread;
ThreadStart threadMethod = new ThreadStart(DoWork);
for (int counter = 1; counter < 4; counter++)
{
Console.WriteLine("Starting Thread {0}", counter);
newThread = new Thread(threadMethod);
newThread.Name = counter.ToString();
newThread.Start();
}
}
static void DoWork()
{
for (int counter = 1; counter < 11; counter++)
{
Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter);
Thread.Sleep(1);
}
}
}
}
使用ParameterizedThreadStart委托来衍生三个新线程
using System;
using System.Threading;
namespace ParameterizedThreadStartSampleCS
{
class Program
{
static void Main()
{
Thread newThread;
ParameterizedThreadStart threadMethod = new ParameterizedThreadStart(DoWork);
for (int counter = 1; counter < 4; counter++)
{
Console.WriteLine("Starting Thread {0}", counter);
newThread = new Thread(threadMethod);
newThread.Name = counter.ToString();
newThread.Start(5);
}
}
static void DoWork(object iterations)
{
for (int counter = 1; counter < (int)iterations + 1; counter++)
{
Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter);
Thread.Sleep(1);
}
}
}
}
使用ThreadPool类从线程池中启动线程
using System;
using System.Threading;
namespace ThreadPoolSampleCS
{
class Program
{
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
Console.WriteLine("Main thread starts");
Thread.Sleep(10000);
Console.WriteLine("Main thread exits.");
}
static void ThreadProc(Object stateInfo)
{
Console.WriteLine("Hello from the thread pool. I will count from 1 to 100");
for (int counter = 1; counter < 101; counter++)
{
Console.WriteLine(counter);
Thread.Sleep(500);
}
}
}
}
实现IAsyncResult接口和AsyncCallback委托
using System;
using System.Threading;
namespace AsynCallbackSampleCS
{
class Program
{
delegate int IntAsyncDelegate(int number);
static IntAsyncDelegate aDelegate;
static int i(int number)
{
if (number < 1)
return 0;
else if (number == 1 || number == 2)
return number;
else
return i(number - 2) + i(number - 1);
}
static void DisplayResult(IAsyncResult ar)
{
int result = aDelegate.EndInvoke(ar);
Console.WriteLine("Elemet number {0} in the i series is {1}", ar.AsyncState.ToString(), result);
}
static void Main(string[] args)
{
aDelegate = new IntAsyncDelegate(i);
AsyncCallback callback = new AsyncCallback(DisplayResult);
Console.Write("Enter a number: ");
int number = int.Parse(Console.ReadLine());
aDelegate.BeginInvoke(number, callback, number);
Console.WriteLine("wait while we process your request");
Thread.Sleep(5000);
}
}
}
通过异步调用迁移线程的执行上下文
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Threading;
namespace ExecutionHostSampleCS
{
class Program
{
[DllImport("advapi32.dll")]
private static extern bool LogonUser(
String lpszUsername,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken);
static void Main()
{
System.IntPtr pToken;
//请将LogonUser方法中的用户名、域名、密码替换成可以登陆本机的值。
if (LogonUser("用户名", "域名", "密码", 2, 0, out pToken))
{
WindowsIdentity.Impersonate(pToken);
DisplayContext("Main");
ThreadPool.QueueUserWorkItem(Callback, null);
ExecutionContext ec = ExecutionContext.Capture();
ExecutionContext.SuppressFlow();
ThreadPool.QueueUserWorkItem(Callback, null);
ContextCallback cb = new ContextCallback(Callback);
ExecutionContext.Run(ec, cb, 0);
ThreadPool.QueueUserWorkItem(Callback, null);
ExecutionContext.RestoreFlow();
ThreadPool.QueueUserWorkItem(Callback, null);
pToken = IntPtr.Zero;
}
Console.ReadLine();
}
static void Callback(object o)
{ DisplayContext("Callback"); }
static void DisplayContext(string s)
{
System.Console.WriteLine(s + " Thread#{0} Current user is {1}",
Thread.CurrentThread.ManagedThreadId, WindowsIdentity.GetCurrent().Name);
}
}
}
实现SynchronizationContext类和SendOrPostCallback委托
using System;
using System.Threading;
namespace SynchronizationContextSampleCS
{
class ount
{
public decimal balance;
public void Deposit(decimal amount)
{
balance += amount;
}
public void Withdraw(decimal amount)
{
balance -= amount;
}
}
class Program
{
static ount ount;
static void Main(string[] args)
{
ount = new ount();
SendOrPostCallback deposit = new SendOrPostCallback(Deposit);
SendOrPostCallback withdraw = new SendOrPostCallback(Withdraw);
SynchronizationContext ctx = new SynchronizationContext();
ctx.Post(deposit, 500);
ctx.Post(withdraw, 500);
Console.ReadLine();
}
static void Withdraw(object state)
{
Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance);
ount.Withdraw(decimal.Parse(state.ToString()));
Console.WriteLine("Withdraw: new balance = {0:C}", ount.balance);
}
static void Deposit(object state)
{
Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance);
ount.Deposit(decimal.Parse(state.ToString()));
Console.WriteLine("Deposit: new balance = {0:C}", ount.balance);
}
}
}
六一云互联六一云互联为西安六一网络科技有限公司的旗下产品。是一个正规持有IDC/ISP/CDN的国内公司,成立于2018年,主要销售海外高防高速大带宽云服务器/CDN,并以高质量.稳定性.售后相应快.支持退款等特点受很多用户的支持!近期公司也推出了很多给力的抽奖和折扣活动如:新用户免费抽奖,最大可获得500元,湖北新购六折续费八折折上折,全场八折等等最新活动:1.湖北100G高防:新购六折续费八折...
快云科技怎么样?快云科技是一家成立于2020年的新起国内主机商,资质齐全 持有IDC ICP ISP等正规商家。我们秉承着服务于客户服务于大众的理念运营,机器线路优价格低。目前已注册用户达到5000+!主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机!产品特色:全配置均20M带宽,架构采用KVM虚拟化技术,全盘SSD硬盘,RAID10阵列, 国...
一年一度的黑色星期五和网络星期一活动陆续到来,看到各大服务商都有发布促销活动。同时RAKsmart商家我们也是比较熟悉的,这次是继双十一活动之后的促销活动。在活动产品中基本上沿袭双11的活动策略,比如有提供云服务器七折优惠,站群服务器首月半价、还有新人赠送红包等活动。如果我们有需要RAKsmart商家VPS、云服务器、独立服务器等产品的可以看看他们家的活动。这次活动截止到11月30日。第一、限时限...