3

我已经搜索了一段时间,但我没有找到解决这个问题的具体独特解决方案,一些使用函数方法,如 .setTimeout(...) 左右,但我只想将超时设置为我的公共方法之一项目。为什么?因为在我向你展示的代码中,有时我没有从我的网站上发布我的 wordpress 帖子的答案,它会杀死所有预定的发布处理程序。

public void blogPublish(String articleTitle, String articleText, Date pubDate, String sourceDomain, String sourceAuthor, String blogCategory) throws XmlRpcFault{
    String fullArticleContent = articleText;
    XmlRpcArray categoryArray = new XmlRpcArray();
    categoryArray.add(blogCategory);
    this.post = new Page();
    this.post.setTitle(articleTitle);
    this.post.setDescription(fullArticleContent);
    this.post.setDateCreated(pubDate);
    this.post.setCategories(categoryArray);
    String newPostIds = this.WP.newPost(post, true);
    int newPostId = Integer.valueOf(newPostIds).intValue();
    Page postNow = WP.getPost(newPostId);
    System.out.println("Article Posted.  Title=> "+ articleTitle);
}

如何使整个 blogPublish 功能超时?如果 5 秒后我仍然没有从我的网站发布完成的回复,我需要跳过它,因为它太慢或在那一刻无法访问。

4

1 回答 1

4

看看SimpleTimeLimiter.callWithTimeout番石榴。

在您的情况下,它可能类似于以下内容:

final String articleTitle = ...;
final String articleText = ...;
final Date pubDate = ...;
final String sourceDomain = ...;
final String sourceAuthor = ...;
final String blogCategory = ...;
final SomeClassOfYours someClassOfYours = ...;

Callable<Void> callable = new Callable<Void>() {
   public Void call() throws XmlRpcFault {
      someClassOfYours.blogPublish(articleTitle, articleText, pubDate, sourceDomain, sourceAuthor, blogCategory);
   }  
}
new SimpleTimeLimiter().callWithTimeout(callable, 5, TimeUnit.SECONDS, true); 
于 2013-05-01T14:25:28.977 回答