再次运行有故障的任务

时间:2019-10-16 08:28:10

标签: c#

我正在运行一项任务,该任务应该可以连续工作。

我有一个while(true)循环,应该检查此任务是否尚未结束。当它结束时,我想再次运行它。

当它由于setTimeoutfname = "" class FormImage(QDialog): def __init__(self): QDialog.__init__(self) loadUi("read_image.ui",self) self.setWindowTitle("Reading Image") self.pbOriginalImage.clicked.connect(self.display_image) self.pbGrayImage.clicked.connect(self.convert_to_gray) self.pbSave.clicked.connect(self.save_image) def display_image(self): global fname fname = QFileDialog.getOpenFileName(self, 'Open file', 'C:\\Users\binil-ping\Desktop\CODE',"Image Files (*.jpg *.gif *.bmp *.png)") pixmap = QPixmap(fname[0]) self.labelImage.setPixmap(pixmap) self.labelImage.setScaledContents(True); def convert_to_gray(self): gray_img = cv2.imread(fname[0], cv2.IMREAD_GRAYSCALE) height, width = gray_img.shape[:2] edges = cv2.Canny(gray_img,180,200) img = QImage(edges, width, height, QImage.Format_Grayscale8) pixmap = QPixmap.fromImage(img) self.labelGray.setPixmap(pixmap) self.labelGray.setScaledContents(True) def save_image(self): fileName = QFileDialog.getSaveFileName(self, 'some text',"whatever.png", '*.png') if "." not in fileName[0]: fileName[0] += ".png" self.addRecentFile(fileName[0]) self.fileName = fileName[0] return self.save_image() 而引发异常或任务结束时该怎么办?

IsFaulted

2 个答案:

答案 0 :(得分:1)

为什么不做类似的事情:

var task = Task.Run(async () =>
{
    while (true) // Infinite retries
    {
        try
        {
            // Do something
        }
        catch (Exception e)
        {
            // Log the exception, but swallow it, so we retry
        }
    }
});

答案 1 :(得分:0)

您可以创建一个创建任务并运行它的委托。如果是task.IsFaulted,则可以通过委派另一个任务来创建。当前任务实例和委托之间的某些映射也应该实现。几行伪代码:

// deletgate
Func<Task> createDoSomethingTask = () => Task.Run(() =>
{
    // do something
});

// --- create task
Task doSomethingTask = createDoSomethingTask();

// --- in other place you can check status, if task should be re-run, then use delegate
if (doSomethingTask.IsFaulted)
{
    doSomethingTask = createDoSomethingTask();
}