"비동기 메서드가 '대기중인'연산자가없고 동기식으로 실행됩니다. 비공개 API 호출을 기다리거나 'Task.Run (... 기다리는 중') 연산자를 사용하는 것이 좋습니다. .) '백그라운드 스레드에서 CPU 바운드 작업을 수행 할 수 있습니다. 분명히 들리지만, 모든 프로세스를 실행하고 Await Task.WhenAll()을 processFiles 메서드에 포함했기 때문에 덮여 있다고 생각했습니다. ?..이 다른 방식으로 어떤 생각이 친절하게 감상 할 수있다비동기 대기 경고 대기
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace ProcessFiles
{
public partial class ProcessFiles : Form
{
public ProcessFiles(int userLevel, int userID)
{
}
private void btnProcess_Click(object sender, EventArgs e)
{
processFiles();
}
async Task<int> processFiles()
{
var processingTasks = new List<Task>();
foreach (string fileName in listBox1.Items)
{
processingTasks.Add(process012(fileName));
processingTasks.Add(process123(fileName));
processingTasks.Add(process234(fileName));
}
await Task.WhenAll(processingTasks);
return (1);
}
async Task<int> process173(string fileName)
{
return (retVal);
}
async Task<int> process032(string fileName)
{
return (retVal);
}
async Task<int> process018(string fileName)
{
return (retVal);
}
'async' 키워드에는 3 가지 방법이 있지만 기다릴 필요가 없습니다. 메시지가 명확하지 않습니까? 또한 완료된 작업을 반환하려는 경우'return Task.FromResult'를'async'없이 사용하십시오 –
나는 Task.WhenAll (processingTasks)를 기다리고 있다고 생각했습니다; 모든 것이 완료 될 때까지 기다리기에 충분했다. 마지막 세 가지 방법은 기다리지 않아도됩니다. – Missy
그들은'ayncit '을 필요로한다는 것을 의미하는'async'를 가지고 있습니다. 그리고'btnProcess_Click'도 마찬가지입니다. –