【发布时间】:2017-12-11 10:24:57
【问题描述】:
在我的 Web API 上,我想在我的 return 语句之后删除一个文件夹。
public string Post(HttpRequestMessage request)
{
//Do cool stuff with request
try
{
return "10.0.2.2:8080/myFolder/index.html";
}
finally
{
Thread.Sleep(60000);
Directory.Delete(myFolder, true);
}
}
我所期望的是制作POST 的设备可以获得返回语句并加载html 文件。一分钟后,我们删除此文件以释放服务器上的空间。
实际情况是,return 语句实际上是在 finally 语句之后发送的。
如何在延迟返回语句之后运行代码,而不延迟返回?
【问题讨论】:
-
你尝试做的事情是不可能的,在得到响应后从调用方法处理操作
-
我无法创建一个带有
thread.sleep的异步任务?或者您是在告诉我我需要设备来对 Web API 进行DELETE调用? -
一旦返回,方法就结束了。您可以使用
Task.Delay(60000)开始任务。 -
finally 块实际上会在方法返回之前执行。您当前的代码会阻塞一分钟,删除文件夹然后返回。 dotnetfiddle.net/tReb0v
-
为什么不直接返回文件内容呢?您正在创建此文件的服务与使用该文件的客户端之间创建紧密耦合。您正在创建一个资源,将一个指向该资源的指针交给客户端,然后尝试猜测该客户端何时会使用该资源,以便您可以清理它。这似乎是一个糟糕的设计选择。
标签: c# thread-sleep try-finally