C#等待任务

时间:2019-03-13 13:44:48

标签: c# task

在我的企业应用程序中,我需要每800毫秒检查文件的存在(主要是通过网络)。当前有效的方法是:

private delegate bool FileExistsDelegate(string file);
public static bool FileExists(string path, int timeout = 2000)
{
    bool retValue = false;
    try
    {
        FileExistsDelegate callback = new FileExistsDelegate(File.Exists);
        IAsyncResult result = callback.BeginInvoke(path, null, null);
        if (result.AsyncWaitHandle.WaitOne(timeout, false))
            return callback.EndInvoke(result);
        return false;
    }
    catch
    {
        return false;
    }
}

问题是如果找不到路径,冻结UI,所以我使用Task重写了它:

public static bool FileExists(string path, int timeout = 2000)
{
    Func<bool> func = () => File.Exists(path);
    Task<bool> task = new Task<bool>(func);
    task.Start();
    if (task.Wait(timeout))
    {
        return true;
    }
    return false;
}       

问题是我的任务没有按预期等待,似乎未使用超时。使用任务/等待方法是否正确?文件格式类似于“ \\ 10.100.100.1 \ status.txt”

1 个答案:

答案 0 :(得分:-1)

您没有返回If (income <= 12000) Then taxamount = income * 0.12 ElseIf (income <= 20000) Then taxamount = income * 0.15 ElseIf (income <= 30000) Then taxamount = income * 0.2 Else: taxamount = income * 0.25 End If 中的Result

Task
  • 如果public static bool FileExists(string path, int timeout = 2000) { Task<bool> task = Task.Run(() => File.Exists(path)); return task.Wait(timeout)) && task.Result; } 失败或falseTask,则返回Result
  • 如果false成功且true成功则返回Task Result