为了账号安全,请及时绑定邮箱和手机立即绑定

c# 等待一个任务

c# 等待一个任务

C#
哈士奇WWW 2022-10-23 10:17:47
在我的企业应用程序中,我需要每 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 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

您没有返回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;

}

false如果Task失败或Resultis 则返回false。

true如果Task成功并且 是Result则 返回true。


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信