如何知道某些线程是否正在运行或完成我的项目?

时间:2018-06-10 11:56:59

标签: c# asp.net thread-safety threadpool

我需要为我的c#项目运行线程

因为我有一个int调用函数列表

例如

    protected void Page_Load(object sender, EventArgs e)
          {
            list<int> lst=new list<int>();

            lst.addrange(/// get list of int from data base);

            foreach(int number in lst)
            {
            call(number );
            }


getAllThreads();
            }


        public void call(int x)
        {
          Thread newThread = new Thread(() => { calc(x); });
          newThread.Start();
           newThread.name=x.tostring();
        }

        public void calc(int x)
        {
        ..... do something
        }

我需要知道哪些线程仍在运行或已完成

我需要知道哪个int仍在运行或已完成

我尝试使用Thread.CurrentThread.Name

与其他功能一样

private void getAllThreads()
        {
            string name= Thread.CurrentThread.Name;
        }

但它总是为空

我尝试使用

Thread.CurrentThread.ManagedThreadId

但它的价值与

不同
 Thread.id

1 个答案:

答案 0 :(得分:0)

尝试使用适合此类事物的库。微软的Reactive Framework非常完美。

以下是代码:

protected void Page_Load(object sender, EventArgs e)
{
    List<int> lst = new List<int>(new[] { 1, 3, 3 });
    /// get list of int from data base);

    var query =
        from number in lst.ToObservable()
        from result in Observable.Start(() => calc(number))
        select result;

    query
        .Subscribe(
            result =>
            {
                /* can handle each result here */
            },
            () =>
            {
                /* all done here */
            });
}

这会自动为您管理所有线程。

Just NuGet&#34; System.Reactive&#34;并将using System.Reactive.Linq;添加到您的代码中。