首页 > 代码库 > Tasks in parallel

Tasks in parallel

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Threading.Tasks;using System.Threading;using System.IO;using Microsoft.SqlServer.Dts.Runtime;struct Response    {        public bool DTSResult { get; set; }        public string Message { get; set; }    }public partial class Default3 : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {    }    Response ExecuteWorkA()    {        bool flagA = false;        try        {            //Thread.Sleep(16000);            string pkgLocation;            Package pkg;            Application app;            DTSExecResult pkgResults;            pkgLocation =              @"C:\Users\xxxxxxxxxx\Documents\Visual Studio 2008\projects\Integration Services Project1\Integration Services Project1\Package.dtsx";            app = new Application();            pkg = app.LoadPackage(pkgLocation, null);            pkgResults = pkg.Execute();            flagA = pkgResults == DTSExecResult.Success;            //throw new Exception("err");        }        catch (Exception ex)        {            flagA = false;        }        return new Response { DTSResult = flagA };    }    Response ExecuteWorkB()    {        bool flagB = false;        try        {            Thread.Sleep(14000);            flagB = true;            //throw new Exception("error");        }        catch (Exception ex)        {            flagB = false;        }        return new Response { DTSResult = flagB };    }    Response ExecuteWorkC()    {        bool flagC = false;        Thread.Sleep(17000);        flagC = true;        return new Response { DTSResult = flagC};    }    protected void Button1_Click(object sender, EventArgs e)    {        List<Func<Response>> lst = new List<Func<Response>>();        lst.Add(ExecuteWorkA);        lst.Add(ExecuteWorkB);        lst.Add(ExecuteWorkC);        List<Response> result = new List<Response>();        Action act = () =>            {                Parallel.ForEach(lst, (func) =>                {                    result.Add(func());                });                bool isFailed = false;                foreach (Response item in result)                {                    if (!item.DTSResult)                    {                        isFailed = true;                        break;                    }                }                                if(result.Count > 0 )                    File.AppendAllText(@"D:\Temp\log.txt", string.Format("{0} {1} ", DateTime.Now, isFailed ? "Failed!" : "Suceed!"));            };        act.BeginInvoke(null, null); //for better, have callback method...    }}

 

Tasks in parallel