Queue
에 파일 이름을 넣어서 새 파일을 찾고있는 FileSystemWatcher
이 있습니다. 별도의 스레드에서 대기열이 작동됩니다. 내 코드가 작동하지만 비동기 프로세스 때문에 정보가 손실 될 수 있는지 질문합니다. (I 네 생각에 내가 어딘가 나사 잠금 식으로 뭔가를해야합니까?) (코드 단순화)BackgroundWorker 및 ConcurrentQueue
public class FileOperatorAsync
{
private ConcurrentQueue<string> fileQueue;
private BackgroundWorker worker;
private string inputPath;
public FileOperatorAsync(string inputPath)
{
this.inputPath = inputPath;
fileQueue = new ConcurrentQueue<string>();
worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.DoWork += worker_DoWork;
Start();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
string file;
while (!worker.CancellationPending && fileQueue.TryDequeue(out file)) //As long as queue has files
{
//Do hard work with file
}
//Thread lock here?
//If now Filenames get queued (Method Execute -> Worker is still busy), they wont get recognized.. or?
}
catch (Exception ex)
{
//Logging
}
finally
{
e.Cancel = true;
}
}
public void Execute(string file) //called by the FileSystemWatcher
{
fileQueue.Enqueue(file);
Start(); //Start only if worker is not busy
}
public void Start()
{
if (!worker.IsBusy)
worker.RunWorkerAsync();
}
public void Stop()
{
worker.CancelAsync();
}
}
제목이 없으면 이해할 수없는 경우가 아니면 제목에 languge 태그를 포함하지 마십시오. 태그는 이러한 용도로 사용됩니다. –