我正在运行一项任务,该任务应该可以连续工作。
我有一个while(true)循环,应该检查此任务是否尚未结束。当它结束时,我想再次运行它。
当它由于setTimeout
或fname = ""
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
答案 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();
}