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);
}
}
}
提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...
vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。致力于全球服务器租用、托管及云计算、DDOS安 全防护、数据实时存储、 高防服务器加速、域名、智能高防服务器、网络安全服务解决方案等领域的智 能化、规范化的体验服务。所有购买年付产品免费更换香港原生IP(支持解锁奈飞),商家承诺,支持3天内无条件退款(原路退回)!点击进入:vollclo...
PQ.hosting怎么样?PQ.hosting是一家俄罗斯商家,正规公司,主要提供KVM VPS和独立服务器,VPS数据中心有香港HE、俄罗斯莫斯科DataPro、乌克兰VOLIA、拉脱维亚、荷兰Serverius、摩尔多瓦Alexhost、德国等。部分配置有变化,同时开通Paypal付款。香港、乌克兰、德国、斯洛伐克、捷克等为NVMe硬盘。香港为HE线路,三网绕美(不太建议香港)。免费支持wi...