我正在运行一个hangfire服务器。 我创建了一个后台作业,如下所示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:padding="16dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="10">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Check In Weight"
android:textColor="@android:color/black"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:layout_weight="20">
<EditText
android:layout_width="match_parent"
android:layout_height="40dp"
android:inputType="number"
android:hint="Current Weight"
android:background="@drawable/editext_border"
android:id="@+id/edtCheckInWhgt"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_weight="10">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:gravity="center"
android:id="@+id/btncheckin"
android:textColor="@android:color/holo_blue_light"
android:background="?android:attr/selectableItemBackground"/>
</LinearLayout>
</LinearLayout>
此作业应该只运行一次,但在Web门户的处理作业部分,我看到它一次运行多次。如何防止这种情况并确保作业只被启动一次?
答案 0 :(得分:4)
每次拨打电话时,都会向DB添加另一个作业。如果您在启动时进行此操作并且您的应用经常重启,则会导致您报告的行为。您可以在方法调用中使用属性DisableConcurrentExecution
,也可以通过Hangfire.RecurringJob.AddOrUpdate
代替BackgroundJob.Enqueue
答案 1 :(得分:0)
var options = new BackgroundJobServerOptions { WorkerCount =1 };
app.UseHangfireServer(options);
我希望这会对你有所帮助