您的位置:首页 > 其它

简单的队列应用

2017-11-30 17:19 239 查看
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Web;

namespace TestQuenu
{
/// <summary>
/// 文件转码简单队列
/// </summary>
public class TransCodQuenuHelp
{

/// <summary>
/// 待转码的文件队列
/// </summary>
private static ConcurrentQueue<string> waitTransFileQuene = new ConcurrentQueue<string>();

/// <summary>
/// 系列化文件存放位置
/// </summary>
private static string waitTransFileSavePath = HttpContext.Current.Server.MapPath("~/1.txt");

/// <summary>
/// 等待毫秒数
/// </summary>
private const int waitTime = 300000;

/// <summary>
/// 日志来源
/// </summary>
private const string source = "";

/// <summary>
/// 日志名称
/// </summary>
private const string logName = "";

/// <summary>
/// 初始化队列
/// </summary>
public static void init()
{
initLog();
ReadWaitTransFile();

/*开启线程用于定时任务*/
Thread thread = new Thread(new ThreadStart(ListenceTransCode));
thread.Start();
thread.IsBackground = true;
}

/// <summary>
/// 初始化日志
/// </summary>
private static void initLog()
{
if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, logName);
}
}

/// <summary>
/// 转码监听
/// </summary>
private static void ListenceTransCode()
{
while (true)
{
if (!waitTransFileQuene.IsEmpty)
{
string curTransFile = string.Empty;
bool isSuc = waitTransFileQuene.TryDequeue(out curTransFile);
if (isSuc)
{
//转码
try
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();

//doSomething();

stopwatch.Stop();
TimeSpan timespan = stopwatch.Elapsed; //  获取当前实例测量得出的总时间
string msg = string.Format("{0}成功,用时{1}分钟", curTransFile, timespan.TotalMinutes);
EventLog.WriteEntry(source, msg, EventLogEntryType.Information);
}
catch (Exception ex)
{
EventLog.WriteEntry(source, ex.Message, EventLogEntryType.Error);
}
}
}
else
{
Thread.Sleep(waitTime);
}
}
}

/// <summary>
/// 从文件中读取未转码的文件列表
/// </summary>
private static void ReadWaitTransFile()
{
if (File.Exists(waitTransFileSavePath))
{
string waitTransFile = File.ReadAllText(waitTransFileSavePath);
waitTransFileQuene = JsonConvert.DeserializeObject<ConcurrentQueue<string>>(waitTransFile);
}
}

/// <summary>
/// 保存未转码的文件类别到文件
/// </summary>
public static void SaveWaitTransFile()
{
if (!waitTransFileQuene.IsEmpty)
{
File.WriteAllText(waitTransFileSavePath, JsonConvert.SerializeObject(waitTransFileQuene));
}
}

/// <summary>
/// 添加新的任务
/// </summary>
/// <param name="fileName">文件全名</param>
public static void Add(string fileName)
{
waitTransFileQuene.Enqueue(fileName);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: