我读到有时直接调用a Task会导致主线程的死锁.
这是我的异步方法:
public async Task<List<JobsWithSchedules>> fillJobsAsync()
{
IOlapJobAccess jobAccess = new OlapJobAccess(_proxy, CentralPointPath);
List<OlapJob> jobs = await jobAccess.GetAllJobsAsync();
List<JobsWithSchedules> quartzJobs = null;
if (jobs != null)
{
quartzJobs = fillQuartzJobs(jobs);
}
return quartzJobs;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了很多方法在同步功能中运行此任务.以下是一些例子:
public void syncFoo1()
{
var fillJobsTask = fillJobsAsync().ContinueWith((task) =>
{
if (task.Status == TaskStatus.RanToCompletion && task.Result != null)
{
List<JobsWithSchedules> quartzJobs = task.Result;
//...
}
else
{
//...
}
});
fillJobsTask.Wait();
}
public void syncFoo2()
{
Task.Run(() => fillJobsAsync()).ContinueWith((task) =>
{
if (task.Status == TaskStatus.RanToCompletion && task.Result != null)
{
List<JobsWithSchedules> quartzJobs = task.Result;
//...
}
else
{
//...
}
});
}
Run Code Online (Sandbox Code Playgroud)
我想知道哪个是更好的解决方案,async在syncFoo()不导致死锁的情况下同步运行该方法.我应该这样做syncFoo2()吗?
PS:syncFoo()来自Windows服务onStart()和onStop().
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |